LRESULT CMainFrame::OnNotify(WPARAM wParam, LPARAM lParam) { // Notification from our dropdown button is recieved if Comctl32.dll version // is 4.70 or later (IE v3 required). switch(((LPNMHDR)lParam)->code) { //Menu for dropdown toolbar button case TBN_DROPDOWN: { if (((LPNMHDR)lParam)->hwndFrom == GetToolBar()) DoPopupMenu(); } } //switch LPNMHDR return CFrame::OnNotify(wParam, lParam); }
BOOL CMainFrame::OnViewMenu() { // This Command is recieved if Comctl32.dll version is below 4.7 DoPopupMenu(); return TRUE; }
static LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam) { switch(uMsg) { default: if(uMsg==g_controlMsg) { if(wParam==CONTROL_NEXT_LAYOUT||wParam==CONTROL_PREV_LAYOUT) { Layout *pFirstLayout,*pActiveLayout; pFirstLayout=CreateLayoutsList(); pActiveLayout=FindActiveLayout(pFirstLayout); if(pActiveLayout) { Layout *pNewLayout; LOG("Active layout: \"%S\"\n",pActiveLayout->pDisplayName); LOG("wParam=%d\n",(int)wParam); if(wParam==CONTROL_NEXT_LAYOUT) { pNewLayout=pActiveLayout->pNextLayout; if(!pNewLayout) pNewLayout=pFirstLayout; } else { Layout *pNextLayout; if(pActiveLayout==pFirstLayout) pNextLayout=NULL; else pNextLayout=pActiveLayout; for(pNewLayout=pFirstLayout;pNewLayout;pNewLayout=pNewLayout->pNextLayout) { if(pNewLayout->pNextLayout==pNextLayout) break; } } if(pNewLayout) { LOG("New layout: \"%S\"\n",pNewLayout->pDisplayName); SetLayoutByHandle(pNewLayout->hkl,TRUE); } } DeleteLayoutList(pFirstLayout); pFirstLayout=NULL; } else if(wParam==CONTROL_SET_LAYOUT) { SetLayoutByHandle((HKL)lParam,TRUE); } } break; case WM_PAINT: { RECT client; PAINTSTRUCT ps; HDC dc=BeginPaint(hWnd,&ps); SaveDC(dc); GetClientRect(hWnd,&client); FillRect(dc,&client,GetStockObject(WHITE_BRUSH)); SelectObject(dc,GetStockObject(DEFAULT_GUI_FONT)); SetTextColor(dc,RGB(0,0,0)); SetTextAlign(dc,TA_CENTER|VTA_CENTER); TextOutA(dc,client.right/2,client.bottom/2,RIGHT_CLICK_MESSAGE,RIGHT_CLICK_MESSAGE_LEN); RestoreDC(dc,-1); EndPaint(hWnd,&ps); } return 0; case WM_INPUTLANGCHANGEREQUEST: UpdateToolTip(FALSE); break; case WM_RBUTTONUP: // avoid injecting the DLL into explorer... DoPopupMenu(); return 0; case SHOWTIP_MSG: UpdateToolTip(TRUE); return 0; case NOTIFY_MSG: { switch(lParam) { case WM_RBUTTONDOWN: DoPopupMenu(); return 0; } } break; case WM_CLOSE: PostQuitMessage(0); return 0; } return DefWindowProc(hWnd,uMsg,wParam,lParam); }