孕妇吃什么钙片:VC++6.0 真正实现对话框启动时完全隐藏

来源:百度文库 编辑:偶看新闻 时间:2024/07/04 23:02:08
前面在网上看到一些用VC++6.0来实现对话框启动时隐藏的文章,感觉都没有达到我想要的效果。在经过分析之后终于实现了,而且非常简便。主要实现方法如下:1、在BOOL CMyApp::InitInstance()函数中将下列内容 CMyDlg dlg; m_pMainWnd = &dlg; int nResponse = dlg.DoModal(); if (nResponse == IDOK) { // TODO: Place code here to handle when the dialog is // dismissed with OK return TRUE; } else if (nResponse == IDCANCEL) { // TODO: Place code here to handle when the dialog is // dismissed with Cancel return FALSE; } // Since the dialog has been closed, return FALSE so that we exit the //  application, rather than start the application's message pump. return TRUE;/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////更改为下列内容(其中的IDD_MY_DIALOG为你在启动时要隐藏的对话框的ID): CMyDlg *dlg=new CMyDlg;// m_pMainWnd = &dlg; m_pMainWnd = dlg; int nResponse =dlg->Create(IDD_MY_DIALOG,NULL);
// int nResponse = dlg.DoModal();/* if (nResponse == IDOK) { // TODO: Place code here to handle when the dialog is //  dismissed with OK return TRUE; } else if (nResponse == IDCANCEL) { // TODO: Place code here to handle when the dialog is //  dismissed with Cancel return FALSE; }*/ // Since the dialog has been closed, return FALSE so that we exit the //  application, rather than start the application's message pump. return TRUE;2、如果采用托盘图标控制方式,则编写托盘图标控制函数,如下:void CMyDlg::OnMyNotify(){ NOTIFYICONDATA nid; nid.cbSize = sizeof( NOTIFYICONDATA ); nid.hWnd = m_hWnd; // handle of window that will receive // messages from icon nid.uID = IDR_MAINFRAME; // id for this icon nid.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP; // the next three parameters are valid nid.uCallbackMessage = WM_SYSTRAY; // message that icon sends when clicked nid.hIcon = AfxGetApp()->LoadIcon( IDR_MAINFRAME ); // icon strcpy( nid.szTip, "显示信息" ); // bubble help message for icon ::Shell_NotifyIcon( NIM_ADD,&nid );}其中的WM_SYSTRAY为自定义消息,应放置在上述托盘函数所在的文件的下列语句*****************************************************#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif的后面 #define  WM_SYSTRAY WM_USER+1003、为使托盘响应鼠标消息,需要添加如下函数LRESULT CMyDlg::OnSystemTray(WPARAM wParam, LPARAM lParam){ // wParam = the nid.uID defined above // (useful if you have more then one icon in tray) // lParam = mouse message if ( wParam = IDR_MAINFRAME ) { switch( lParam ) { case WM_MBUTTONDOWN: OnDestroy();//此处为你想完成的任何功能函数 break; case WM_LBUTTONDOWN: { ModifyStyleEx(WS_EX_TOOLWINDOW,WS_EX_APPWINDOW, SWP_DRAWFRAME);//点击鼠标左键时显示对话框 this->ShowWindow(TRUE); this->SetForegroundWindow();//前置对话框 } break; case WM_RBUTTONDOWN: this->SetForegroundWindow();//前置对话框,调用弹出菜单。当鼠标在菜单外点击时菜单自动消失 POINT pt; GetCursorPos(&pt); CMenu menu; menu.LoadMenu(IDR_MENU_POP); menu.GetSubMenu(0)->EnableMenuItem(IDR_OPENARCHIVE,MF_BYCOMMAND | MF_ENABLED); menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTALIGN, pt.x, pt.y, this,NULL); menu.Detach(); break; } }    return 1;}4、增加销毁托盘图标的功能函数void CMyDlg::OnDestroyIcon(){ NOTIFYICONDATA nid; nid.cbSize = sizeof( NOTIFYICONDATA ); nid.hWnd = m_hWnd; nid.uID = IDR_MAINFRAME; nid.uFlags = 0; ::Shell_NotifyIcon( NIM_DELETE,&nid );}5、在退出程序前必须使用下述方法void CMyDlg::OnDestroy() { // TODO: Add your message handler code here// UnregisterHotKey(GetSafeHwnd(),WM_HOTKEYEXIT);// // UnregisterHotKey(GetSafeHwnd(),WM_HOTKEYSHOW);// m_hWndWM_YHSHOTKEYEXIT// UnregisterHotKey(GetSafeHwnd(),WM_HOTKEYHIDE);// m_hWnd
OnDestroyIcon();
CDialog::OnDestroy();}6、结尾如果不采用托盘图标方式交互,也可以采用“热键”方式:在BOOL CMyDlg::OnInitDialog()中设置 RegisterHotKey(GetSafeHwnd(),WM_HOTKEYICON,MOD_CONTROL|MOD_ALT, 'A');  RegisterHotKey(GetSafeHwnd(),WM_HOTKEYEXIT,MOD_CONTROL|MOD_ALT, 'B');  RegisterHotKey(GetSafeHwnd(),WM_HOTKEYSHOW,MOD_CONTROL|MOD_ALT, 'C');  RegisterHotKey(GetSafeHwnd(),WM_HOTKEYHIDE,MOD_CONTROL|MOD_ALT, 'D'); // 注:功能键可以是 MOD_CONTROL|MOD_ALT|MOD_SHIFT 的组合。不过一定要在退出程序前注销“热键”。见上面第5条。//其中的自定义消息如下#define WM_HOTKEYEXIT WM_USER + 1000#define WM_HOTKEYSHOW WM_USER + 1001#define WM_HOTKEYHIDE WM_USER + 1002#define WM_HOTKEYICON WM_USER + 1003为自定义消息,必须放置于文件的头部。见文中*****************************************************处。