HRESULT CWorkshareMenu::MenuMessageHandler( UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT* pResult ) { switch ( uMsg ) { case WM_MEASUREITEM: return OnMeasureItem( (MEASUREITEMSTRUCT*) lParam, pResult ); break; case WM_DRAWITEM: return OnDrawItem( (DRAWITEMSTRUCT*) lParam, pResult ); break; } return S_OK; }
int AddString(TCHAR *text, LPARAM data=0) { m_adding = true; int idx = CCtrlListBox::AddString(text, data); m_adding = false; if (idx == LB_ERR) return idx; MEASUREITEMSTRUCT mis = {0}; mis.CtlType = ODT_LISTBOX; mis.CtlID = m_idCtrl; mis.itemID = idx; mis.itemData = data; OnMeasureItem(&mis); if (mis.itemHeight) SendMessage(m_hwnd, LB_SETITEMHEIGHT, idx, mis.itemHeight); return idx; }
STDMETHODIMP CBmpCtxMenuExt::MenuMessageHandler ( UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT* pResult ) { switch ( uMsg ) { case WM_MEASUREITEM: { return OnMeasureItem ( (MEASUREITEMSTRUCT*) lParam, pResult ); } break; case WM_DRAWITEM: { return OnDrawItem ( (DRAWITEMSTRUCT*) lParam, pResult ); } break; } return S_OK; }
LRESULT CustomWndProc(UINT msg, WPARAM wParam, LPARAM lParam) { if (msg == WM_SIZE) { SendMessage(m_hwnd, WM_SETREDRAW, FALSE, 0); int cnt = GetCount(); for (int idx = 0; idx < cnt; ++idx) { MEASUREITEMSTRUCT mis = { 0 }; mis.CtlType = ODT_LISTBOX; mis.CtlID = m_idCtrl; mis.itemID = idx; mis.itemData = GetItemData(idx); OnMeasureItem(&mis); if (mis.itemHeight) SendMessage(m_hwnd, LB_SETITEMHEIGHT, idx, mis.itemHeight); } SendMessage(m_hwnd, WM_SETREDRAW, TRUE, 0); RedrawWindow(m_hwnd, NULL, NULL, RDW_INVALIDATE); } return CSuper::CustomWndProc(msg, wParam, lParam); }
////////////////// // Virtual CSubclassWnd window proc. All messages come here before frame // window. Isn't it cool? Just like in the old days! // LRESULT CCoolMenuManager::WindowProc(UINT msg, WPARAM wp, LPARAM lp) { switch(msg) { case WM_SYSCOLORCHANGE: case WM_SETTINGCHANGE: Refresh(); break; case WM_MEASUREITEM: if (OnMeasureItem((MEASUREITEMSTRUCT*)lp)) return TRUE; // handled break; case WM_DRAWITEM: if (OnDrawItem((DRAWITEMSTRUCT*)lp)) return TRUE; // handled break; case WM_INITMENUPOPUP: // Very important: must let frame window handle it first! // Because if someone calls CCmdUI::SetText, MFC will change item to // MFT_STRING, so I must change back to MFT_OWNERDRAW. // CSubclassWnd::WindowProc(msg, wp, lp); OnInitMenuPopup(CMenu::FromHandle((HMENU)wp), (UINT)LOWORD(lp), (BOOL)HIWORD(lp)); return 0; case WM_MENUSELECT: OnMenuSelect((UINT)LOWORD(wp), (UINT)HIWORD(wp), (HMENU)lp); break; case WM_MENUCHAR: LRESULT lr = OnMenuChar((TCHAR)LOWORD(wp), (UINT)HIWORD(wp), CMenu::FromHandle((HMENU)lp)); if (lr!=0) return lr; break; } return CSubclassWnd::WindowProc(msg, wp, lp); }
bool CChannelMenu::HandleMessage(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam,LRESULT *pResult) { if (m_hwnd==NULL || hwnd!=m_hwnd) return false; switch (uMsg) { case WM_MEASUREITEM: if (OnMeasureItem(hwnd,wParam,lParam)) { *pResult=TRUE; return true; } break; case WM_DRAWITEM: if (OnDrawItem(hwnd,wParam,lParam)) { *pResult=TRUE; return true; } break; case WM_UNINITMENUPOPUP: if (OnUninitMenuPopup(hwnd,wParam,lParam)) { *pResult=0; return true; } break; case WM_MENUSELECT: if (OnMenuSelect(hwnd,wParam,lParam)) { *pResult=0; return true; } break; } return false; }
/*------------------------------------------------ dialog procedure --------------------------------------------------*/ INT_PTR CALLBACK DlgProcSelectIcon(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_INITDIALOG: if(!InitSelectIcon(hDlg)) EndDialog(hDlg, IDCANCEL); return TRUE; case WM_MEASUREITEM: OnMeasureItem(hDlg, lParam); return TRUE; case WM_DRAWITEM: OnDrawItem(lParam); return TRUE; case WM_COMMAND: { WORD id; id = LOWORD(wParam); switch(id) { case IDC_SANSHOICON: OnBrowse(hDlg); break; case IDOK: OnOK(hDlg); case IDCANCEL: EndSelectIcon(hDlg); EndDialog(hDlg, id); break; } return TRUE; } } return FALSE; }
LRESULT APIENTRY GraphLegendWndProc (HWND hWnd, WORD wMsg, WPARAM wParam, LONG lParam) { // GraphLegendWndProc BOOL bCallDefProc ; LRESULT lReturnValue ; bCallDefProc = FALSE ; lReturnValue = 0L ; switch (wMsg) { // switch case WM_DELETEITEM: break ; case WM_COMMAND: switch (HIWORD (wParam)) { // switch case LBN_DBLCLK: OnDoubleClick (hWnd) ; break ; case LBN_SELCHANGE: OnSelectionChanged (hWnd) ; break ; default: break ; } // switch break ; case WM_CREATE: OnLegendCreate (hWnd, (LPCREATESTRUCT) lParam) ; break ; case WM_DESTROY: OnDestroy (hWnd) ; break ; case WM_DRAWITEM: OnDrawLegendItem (hWnd, (LPDRAWITEMSTRUCT) lParam) ; break ; case WM_MEASUREITEM: OnMeasureItem (hWnd, (LPMEASUREITEMSTRUCT) lParam) ; break ; case WM_PAINT: OnPaint (hWnd) ; break ; case WM_SIZE: OnSize (hWnd, LOWORD (lParam), HIWORD (lParam)) ; break ; case WM_SETFOCUS: OnSetFocus (hWnd) ; break ; default: bCallDefProc = TRUE ; } // switch if (bCallDefProc) lReturnValue = DefWindowProc (hWnd, wMsg, wParam, lParam) ; return (lReturnValue); } // GraphLegendWndProc
wxCoord wxVListBox::OnGetLineHeight(size_t line) const { return OnMeasureItem(line) + 2*m_ptMargins.y; }
wxCoord ContentBoxCtrol::OnGetLineHeight(size_t line) const { return OnMeasureItem(line) + 2*m_ptMargins.y; }
LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { static UINT s_uTaskBarCreated = 0; switch(uMsg) { case WM_CREATE: { g_hwndMain = hwnd; // Register task bar (re)creation in order to reload systray icons after explorer crashes s_uTaskBarCreated = RegisterWindowMessage(REGISTER_MESSAGE); // Set Icons SendMessage(hwnd, WM_SETICON, ICON_BIG, (LONG)(LONG_PTR)LoadImage(g_hInst, MAKEINTRESOURCE(IDI_MAIN_ICON), IMAGE_ICON, GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON), LR_DEFAULTCOLOR)); SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LONG)(LONG_PTR)LoadImage(g_hInst, MAKEINTRESOURCE(IDI_MAIN_ICON), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR)); ShowWindow(hwnd, SW_HIDE); // Clear the list g_IconTray.clear(); installHookKeyboard(); // Open the configuration if (openConfig() == FALSE) { uninstallHookKeyboard(); clearMenuSkin(); MessageBox(g_hwndMain, L"Configuration file not found or invalid", ERR_MSGBOX_TITLE, NULL); PostQuitMessage(0); return 0; } // Retreive the version of Windows (in order to know if it is a win200 or superior) windowsVersion = GetWindowsVersion(); // Initialisation of variables for menus InitMenuVars(); // Add the system tray icons (depends of the configuration) ShowTrayIcons(); // Show loading error messages if (g_loadingmessage != NULL) { ShowBalloon(ERR_MSGBOX_TITLE, g_loadingmessage, 0, NIIF_ERROR); free(g_loadingmessage); g_loadingmessage = NULL; } // Launch application in "autorun" mode fireEvent(PROG_EVENT_START); FlushMemory(); } break; case WM_HOTKEY: if( (wParam >= IDH_HOTKEY_MENU) && (wParam <= (IDH_HOTKEY_MENU + g_portal->hotkeys.size()) ) ) { // Detect application item or menu item in order to open a menu or launch the application PortalProg* l_sp = g_portal->hotkeys[ wParam - IDH_HOTKEY_MENU ]; while( l_sp ) { if( l_sp->progs.size() > 0 ) { ShowTrayMenu(l_sp, PORTAL_MENU_HOTKEY); } else { l_sp->run(false); // Some commands could call quitPortal. In this case g_portal is set to NULL. if(g_portal == NULL) return 0; } l_sp = l_sp->nextSameHotkey; } } FlushMemory(); break; case WM_DESTROY: { quitPortal(); } break; case WM_MYTRAYMSG: if ((wParam >= IDI_MAIN_ICON) && g_portal && (wParam <= (IDI_MAIN_ICON + g_portal->menus.size()))) { // Find the clicked systray int pos = (int)wParam - IDI_MAIN_ICON; if( ((UINT)lParam == WM_RBUTTONUP) || ((UINT)lParam == WM_LBUTTONUP) || ((UINT)lParam == WM_MOUSEMOVE) ) { // Left click : minimalist menu // Right click : Complete menu (with About/Reload/Quit) // Auto Open : Complete menu (like right click) with a automatic dismiss int param = PORTAL_MENU_SYSTRAY; if((UINT)lParam == WM_RBUTTONUP) { param = PORTAL_MENU_SYSTRAY_CMD; } if( ((UINT)lParam == WM_MOUSEMOVE) ) { if( (g_portal->menus[pos] != NULL) && (g_portal->menus[pos]->options & PROG_OPTION_AUTOOPEN) ) { param = PORTAL_MENU_SYSTRAY_AUTO; } else { return 0; } } // Detect if the icon is for a menu or a application if( (g_portal->menus[pos] != NULL) && ( g_portal->menus[pos]->progs.size() > 0 ) ) { ShowTrayMenu(g_portal->menus[pos], param); g_currentMenu = pos; } else if( (g_portal->menus[pos] != NULL) && (g_portal->menus[pos]->progExe != NULL )) { if((UINT)lParam == WM_LBUTTONUP) { g_portal->menus[pos]->run(true); g_currentMenu = pos; } else { ShowTrayMenu(g_portal->menus[pos], param); g_currentMenu = pos; } } else { ShowTrayMenu(NULL, param); g_currentMenu = 0; } FlushMemory(); } else if( (UINT)lParam == NIN_BALLOONUSERCLICK ) { if(g_aboutbaloon) checkGuiproVersion(); FlushMemory(); return 0; } } break; case WM_INITMENUPOPUP : OnInitMenuPopup(hwnd, wParam, lParam); break; case WM_UNINITMENUPOPUP: OnUninitMenuPopup(hwnd, wParam, lParam); break; case WM_MEASUREITEM : OnMeasureItem(hwnd, wParam, lParam); break; case WM_DRAWITEM : OnDrawItem(hwnd, wParam, lParam); break; case WM_MENUCHAR: return OnMenuCharItem(hwnd, wParam, lParam); case WM_COMMAND: // Retreive a menu command if( wParam == IDM_EXIT ) { quitPortal(); } else if( wParam == IDM_RELOAD ) { reloadPortalConfig(); } else if( wParam == IDM_ABOUT ) { ShowAbout(g_currentMenu); FlushMemory(); } else if( ((UINT)wParam >= (PORTAL_HK_ID)) && ( (UINT)wParam <= (UINT)(PORTAL_HK_ID + menuGetNbElem()) ) ) { PortalProg* l_sp = menuGetElem( (int)(wParam - 1 - PORTAL_HK_ID) ); l_sp->run(true); FlushMemory(); } else if( ((UINT)wParam >= (PORTAL_FILE_ID)) && ( (UINT)wParam < (UINT)(PORTAL_FILE_ID + menuGetNbFiles()) ) ) { PortalProg* l_sp = menuGetFile( (int)(wParam - PORTAL_FILE_ID) ); l_sp->run(true); FlushMemory(); for(PortalProgVector::iterator i = g_portal_files.begin(); i != g_portal_files.end(); i++) { delete (*i); } g_portal_files.clear(); } break; default: if( uMsg == s_uTaskBarCreated ) { // Traskbar (re)creation, we have to reset systray icons ReloadTrayIcons(); FlushMemory(); } else { return(DefWindowProc(hwnd, uMsg, wParam, lParam)); } break; } return 0; }
//-------------------------------------------------------------------------------- bool CWinCtrlParentController::ProcessMessage( COSWindow& Window, Cmp_long_ptr& lResult, unsigned int uMsg, Cmp_uint_ptr wParam, Cmp_long_ptr lParam ) { _WINQ_FCONTEXT( "CWinCtrlParentController:ProcessMessage" ); bool bProcessed = ProcessHook( Window, lResult, uMsg, wParam, lParam ); switch ( uMsg ) { case COSWindow::wmCtlColorMsgBox: { CDeviceContext::refType refDC = CDeviceContext::FromHandle( CDCHandle( (CDCInternal*)0, (void*)( wParam ) ).Ref() ); COSWindow::refType refMsgBox = COSWindow::FromHandle( CWindowHandle( 0, (void*)(lParam ) ).Ref() ); lResult = reinterpret_cast< long >( OnCtlColourMsgBox( Window, refDC, refMsgBox )->Handle()->AsHandle().ptr() ); bProcessed = true; } break; case COSWindow::wmCtlColorEdit: { CDeviceContext::refType refDC = CDeviceContext::FromHandle( CDCHandle( (CDCInternal*)0, (void*)( wParam ) ).Ref() ); COSWindow::refType refEdit = COSWindow::FromHandle( CWindowHandle( 0, (void*)(lParam ) ).Ref() ); lResult = reinterpret_cast< long >( OnCtlColour( Window, refDC, refEdit, COSWindow::wmCtlColorEdit )->Handle()->AsHandle().ptr() ); bProcessed = true; } break; case COSWindow::wmCtlColorListBox: { CDeviceContext::refType refDC = CDeviceContext::FromHandle( CDCHandle( (CDCInternal*)0, (void*)( wParam ) ).Ref() ); COSWindow::refType refListBox = COSWindow::FromHandle( CWindowHandle( 0, (void*)(lParam ) ).Ref() ); lResult = reinterpret_cast< long >( OnCtlColour( Window, refDC, refListBox, COSWindow::wmCtlColorListBox )->Handle()->AsHandle().ptr() ); bProcessed = true; } break; case COSWindow::wmCtlColorBtn: { CDeviceContext::refType refDC = CDeviceContext::FromHandle( CDCHandle( (CDCInternal*)0, (void*)( wParam ) ).Ref() ); COSWindow::refType refButton = COSWindow::FromHandle( CWindowHandle( 0, (void*)(lParam ) ).Ref() ); lResult = reinterpret_cast< long >( OnCtlColour( Window, refDC, refButton, COSWindow::wmCtlColorBtn )->Handle()->AsHandle().ptr() ); bProcessed = true; } break; case COSWindow::wmCtlColorDlg: { CDeviceContext::refType refDC = CDeviceContext::FromHandle( CDCHandle( (CDCInternal*)0, (void*)( wParam ) ).Ref() ); COSWindow::refType refDlg = COSWindow::FromHandle( CWindowHandle( 0, (void*)(lParam ) ).Ref() ); lResult = reinterpret_cast< long >( OnCtlColourDialog( Window, refDC, refDlg )->Handle()->AsHandle().ptr() ); bProcessed = true; } break; case COSWindow::wmCtlColorScrollbar: { CDeviceContext::refType refDC = CDeviceContext::FromHandle( CDCHandle( (CDCInternal*)0, (void*)( wParam ) ).Ref() ); COSWindow::refType refScrollBar = COSWindow::FromHandle( CWindowHandle( 0, (void*)(lParam ) ).Ref() ); lResult = reinterpret_cast< long >( OnCtlColour( Window, refDC, refScrollBar, COSWindow::wmCtlColorStatic )->Handle()->AsHandle().ptr() ); bProcessed = true; } break; case COSWindow::wmCtlColorStatic: { CDeviceContext::refType refDC = CDeviceContext::FromHandle( CDCHandle( (CDCInternal*)0, (void*)( wParam ) ).Ref() ); COSWindow::refType refStatic = COSWindow::FromHandle( CWindowHandle( 0, (void*)(lParam ) ).Ref() ); lResult = reinterpret_cast< long >( OnCtlColour( Window, refDC, refStatic, COSWindow::wmCtlColorStatic )->Handle()->AsHandle().ptr() ); bProcessed = true; } break; case COSWindow::wmDrawItem: { DrawItemStruct* pItemStruct = reinterpret_cast< DrawItemStruct* >( lParam ); OnDrawItem( Window, wParam, pItemStruct ); lResult = 1; bProcessed = true; } break; case COSWindow::wmCompareItem: { lResult = OnCompareItem( Window, wParam, reinterpret_cast< ComparisonItem* >( lParam ) ); bProcessed = true; } break; case COSWindow::wmMeasureItem: { nsWin32::MeasureItemStruct* pItemStruct = reinterpret_cast< nsWin32::MeasureItemStruct* >( lParam ); OnMeasureItem( Window, wParam, pItemStruct ); lResult = 1; bProcessed = true; } break; case COSWindow::wmDeleteItem: { nsWin32::DeleteItemStruct* pItemStruct = reinterpret_cast< nsWin32::DeleteItemStruct* >( lParam ); OnDeleteItem( Window, wParam, pItemStruct ); lResult = 1; bProcessed = true; } break; case COSWindow::wmVKeyToItem: { unsigned short wVKey = LoWord( wParam ); unsigned short wPos = HiWord( wParam ); COSWindow::refType refListBox = COSWindow::FromHandle( CWindowHandle( 0, (void*)( lParam ) ).Ref() ); lResult = OnVKeyToItem( Window, wVKey, wPos, refListBox ); bProcessed = true; } break; case COSWindow::wmCharToItem: { unsigned short wKey = LoWord( wParam ); unsigned short wPos = HiWord( wParam ); COSWindow::refType refListBox = COSWindow::FromHandle( CWindowHandle( 0, (void*)( lParam ) ).Ref() ); lResult = OnCharToItem( Window, wKey, wPos, refListBox ); bProcessed = true; } break; } return bProcessed; }