大佬教程收集整理的这篇文章主要介绍了c – 通知图标接收WM_LBUTTONDBLCLK但不接收WM_CONTEXTMENU,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
注意:如果我将WM_COntexTMENU更改为WM_RBUTTONUP,它会收到事件,但光标坐标是错误的.
/******************************************************************************/ /* Menu resource */ /******************************************************************************/ LANGUAGE LANG_NEUTRAL,SUBLANG_NEUTRAL IDR_TRAymENU MENU { POPUP "" { MENUITEM "&Show Status Window",IDM__SHOW_STATUS_WINDOW MENUITEM "&About",IDM__ABOUT MENUITEM SEPARATOR MENUITEM "&Exit",IDM__EXIT } } /******************************************************************************/ /* WinMain() */ /******************************************************************************/ int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow ) { // ... code unrelated to icon // Enable Visual Styles InitCommonControls(); // create the main dialog if( NULL == (hWnd=CreateDialog(hInstance,MAKEINTresourcE(IDD_MAINDLG),NULL,(DLGPROC)WndProC)) ) { messageBox( NULL,"Error creaTing the main dialog!",MB_OK | MB_ICONERROR ); return -1; } // ... code unrelated to icon MSG msg; while( Getmessage(&msg,0) && IsWindow(hWnd) ) { Translatemessage(&msg); Dispatchmessage(&msg); } return 0; } /******************************************************************************/ /* WndProc() */ /******************************************************************************/ BOOL CALLBACK WndProc(HWND hWndDlg,UINT message,WPARAM wParam,LPARAM lParam) { switch(messagE) { case WM_INITDIALOG: { // ... code unrelated to icon hIcon = (HICON)LoadImage( GetModuleHandle(NULL),MAKEINTresourcE(IDI_DDCMp),IMAGE_ICON,16,LR_DEFAULTSIZE ); // Setup the system tray icon memset( &nid,sizeof(NOTIFYICONDATA) ); nid.cbSize = sizeof(NOTIFYICONDATA); nid.hWnd = hWndDlg; nid.uID = 0xDDc; nid.uFlags = NIF_ICON | NIF_messaGE | NIF_TIP | NIF_SHOWTIP; nid.uCallBACkmessage = WM_APP + 0xDDc; nid.hIcon = hIcon; strcpy( nid.szTip,"DDCMP Driver" ); SHell_NotifyIcon( NIM_ADD,&nid ); // ... code unrelated to icon return true; } break; case WM_APP + 0xDDC: { switch( LOWORD(lParam) ) { case WM_COntexTMENU: { messageBox( hWndDlg,"This message Box never shows up.",MB_OK | MB_SY@L_651_11@mODAL ); HMENU hMenu = LoadMenu(GetModuleHandle(NULL),MAKEINTresourcE(IDR_TRAymENU)); if( hMenu ) { HMENU hSubMenu = GetSubMenu(hMenu,0); if( hSubMenu ) { SetForegroundWindow( hWndDlg ); POINT pt = { LOWORD(wParam),HIWORD(wParam) }; UINT uFlags = TPM_RIGHTBUTTON; if( 0 != GetSy@L_651_11@metrics(SM_MENUDROPALIGNMENT) ) uFlags |= TPM_RIGHTALIGN; else uFlags |= TPM_LEFTALIGN; TrackPopupMenuEx( hSubMenu,uFlags,pt.x,pt.y,hWndDlg,NULL ); } Destroymenu( hMenu ); } } break; case WM_LBUTTONDBLCLK: if( IsWindowVisible(hWndDlg) ) ShowWindow( hWnd,SW_HIDE ); else ShowWindow( hWnd,SW_SHOW ); break; } return true; } break; case WM_CLOSE: ShowWindow( hWndDlg,SW_HIDE ); break; case WM_DESTROY: case WM_QUIT: { SHell_NotifyIcon( NIM_@R_674_9421@E,&nid ); // ... code unrelated to icon return true; } break; } return false; }
这是Windows 7.1 SDK示例中的WndProc
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,LPARAM lParam) { static HWND s_hwndFlyout = NULL; static BOOL s_fCanShowFlyout = TRUE; switch (messagE) { case WM_CREATE: // add the notification icon if (!AddNotificationIcon(hwnd)) { messageBox(hwnd,L"Please read the ReadMe.txt file for troubleshooTing",L"Error adding icon",MB_OK); return -1; } break; case WM_COMMAND: { int const wmId = LOWORD(wParam); // Parse the menu SELEctions: switch (wmId) { case IDM_LOWINK: ShowLowInkBalloon(); break; case IDM_NOINK: ShowNoInkBalloon(); break; case IDM_PRINTJOB: ShowPrintJobBalloon(); break; case IDM_OPTIONS: // placeholder for an options dialog messageBox(hwnd,L"Display the options dialog here.",L"Options",MB_OK); break; case IDM_EXIT: DestroyWindow(hwnd); break; case IDM_FLYOUT: s_hwndFlyout = ShowFlyout(hwnd); break; default: return DefWindowProc(hwnd,message,wParam,lParam); } } break; case WMAPP_NOTIFYCALLBACK: switch (LOWORD(lParam)) { case NIN_SELECT: // for NOTIFYICON_VERSION_4 clients,NIN_SELECT is prerable to listening to mouse clicks and key presses // directly. if (IsWindowVisible(s_hwndFlyout)) { HideFlyout(hwnd,s_hwndFlyout); s_hwndFlyout = NULL; s_fCanShowFlyout = falSE; } else if (s_fCanShowFlyout) { s_hwndFlyout = ShowFlyout(hwnd); } break; case NIN_BALLOONTIMEOUT: RestoreTooltip(); break; case NIN_BALLOONUSERCLICK: RestoreTooltip(); // placeholder for the user clicking on the balloon. messageBox(hwnd,L"The user clicked on the balloon.",L"User click",MB_OK); break; // // // As you can very plainly see,the Windows SDK Sample ONLY used WM_COntexTMNEU // // case WM_COntexTMENU: { POINT const pt = { LOWORD(wParam),HIWORD(wParam) }; ShowContextMenu(hwnd,pt); } break; } break; case WMAPP_HIDEFLYOUT: HideFlyout(hwnd,s_hwndFlyout); s_hwndFlyout = NULL; s_fCanShowFlyout = falSE; break; case WM_TIMER: if (wParam == HIDEFLYOUT_TIMER_ID) { // please see the comment in HideFlyout() for an explanation of this code. KillTimer(hwnd,HIDEFLYOUT_TIMER_ID); s_fCanShowFlyout = TRUE; } break; case WM_DESTROY: @R_674_9421@eNotificationIcon(); PostQuitmessage(0); break; default: return DefWindowProc(hwnd,lParam); } return 0; }
您可以通过在NIM_ADD调用后调用SHell_NotifyIcon传递NIM_SETVERSION,按照documentation中的描述选择新行为(和WM_COntexTMENU).据推测,您正在查看的SDK示例是在某处做的.我的猜测是你的代码遗漏了什么.
文档的关键摘录在备注部分:
以上是大佬教程为你收集整理的c – 通知图标接收WM_LBUTTONDBLCLK但不接收WM_CONTEXTMENU全部内容,希望文章能够帮你解决c – 通知图标接收WM_LBUTTONDBLCLK但不接收WM_CONTEXTMENU所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。