LRESULT CALLBACK FrameWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CREATE: // For now, the Help dialog item is disabled because of lacking of HTML Help support EnableMenuItem(GetMenu(hWnd), ID_HELP_HELPTOPICS, MF_BYCOMMAND | MF_GRAYED); CreateWindowExW(0, szChildClass, NULL, WS_CHILD | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hWnd, (HMENU)0, hInst, 0); break; case WM_COMMAND: if (!_CmdWndProc(hWnd, message, wParam, lParam)) return DefWindowProcW(hWnd, message, wParam, lParam); break; case WM_ACTIVATE: if (LOWORD(hWnd) && g_pChildWnd) SetFocus(g_pChildWnd->hWnd); break; case WM_SIZE: resize_frame_client(hWnd); break; case WM_TIMER: break; case WM_INITMENU: OnInitMenu(hWnd); break; case WM_ENTERMENULOOP: OnEnterMenuLoop(hWnd); break; case WM_EXITMENULOOP: OnExitMenuLoop(hWnd); break; case WM_MENUSELECT: OnMenuSelect(hWnd, LOWORD(wParam), HIWORD(wParam), (HMENU)lParam); break; case WM_SYSCOLORCHANGE: /* Forward WM_SYSCOLORCHANGE to common controls */ SendMessageW(g_pChildWnd->hListWnd, WM_SYSCOLORCHANGE, 0, 0); SendMessageW(g_pChildWnd->hTreeWnd, WM_SYSCOLORCHANGE, 0, 0); break; case WM_DESTROY: WinHelpW(hWnd, getAppName(), HELP_QUIT, 0); SaveSettings(); PostQuitMessage(0); default: return DefWindowProcW(hWnd, message, wParam, lParam); } return 0; }
LRESULT CALLBACK FrameWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CREATE: CreateWindowEx(0, szChildClass, NULL, WS_CHILD | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hWnd, (HMENU)0, hInst, 0); break; case WM_COMMAND: if (!_CmdWndProc(hWnd, message, wParam, lParam)) return DefWindowProc(hWnd, message, wParam, lParam); break; case WM_ACTIVATE: if (LOWORD(hWnd)) SetFocus(g_pChildWnd->hWnd); break; case WM_SIZE: resize_frame_client(hWnd); break; case WM_TIMER: break; case WM_INITMENU: OnInitMenu(hWnd); break; case WM_ENTERMENULOOP: OnEnterMenuLoop(hWnd); break; case WM_EXITMENULOOP: OnExitMenuLoop(hWnd); break; case WM_MENUSELECT: OnMenuSelect(hWnd, LOWORD(wParam), HIWORD(wParam), (HMENU)lParam); break; case WM_SYSCOLORCHANGE: /* Forward WM_SYSCOLORCHANGE to common controls */ SendMessage(g_pChildWnd->hListWnd, WM_SYSCOLORCHANGE, 0, 0); SendMessage(g_pChildWnd->hTreeWnd, WM_SYSCOLORCHANGE, 0, 0); break; case WM_DESTROY: WinHelp(hWnd, _T("regedit"), HELP_QUIT, 0); PostQuitMessage(0); default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
//-------------------------------------------------------------------------------- bool CMenuController::ProcessMessage( COSWindow& Window, Cmp_long_ptr& lResult, unsigned int uMsg, Cmp_uint_ptr wParam, Cmp_long_ptr lParam ) { _WINQ_FCONTEXT( "CMenuController::ProcessMessage" ); bool bProcessed = ProcessHook( Window, lResult, uMsg, wParam, lParam ); switch ( uMsg ) { case COSWindow::wmContextMenu: { COSWindow::refType refWnd = COSWindow::FromHandle( CWindowHandle( 0, (void*)(wParam) ).Ref() ); unsigned short wXPos = LoWord( lParam ); unsigned short wYPos = HiWord( lParam ); OnContextMenu( Window, refWnd, wXPos, wYPos ); bProcessed = true; } break; case COSWindow::wmInitMenu: { CMenu::refType refMenu = CMenu::FromHandle( CMenuHandle( 0, (void*)(wParam) ).Ref() ); OnInitMenu( Window, refMenu ); lResult = 0; bProcessed = true; } break; case COSWindow::wmInitMenuPopup: { CMenu::refType refMenu = CMenu::FromHandle( CMenuHandle( 0, (void*)( wParam ) ).Ref() ); unsigned short wPos = LoWord( lParam ); int bWindowMenu = static_cast< int >( HiWord( lParam ) ); OnInitMenuPopup( Window, refMenu, wPos, bWindowMenu ? true : false ); lResult = 0; bProcessed = true; } break; #if ( WINVER >= 0x0500 ) case COSWindow::wmUninitMenuPopup: { CMenu::refType refMenu = CMenu::FromHandle( CMenuHandle( 0, (void*)(wParam) ).Ref() ); unsigned short wDestroyedMenu = HiWord( lParam ); OnDestroyedMenuPopup( Window, refMenu, wDestroyedMenu ); bProcessed = true; } break; #endif//( WINVER >= 0x0500 ) case COSWindow::wmMenuSelect: { unsigned short wIndex = LoWord( wParam ); unsigned short wFlags = HiWord( wParam ); CMenu::refType refMenu = CMenu::FromHandle( CMenuHandle( 0, (void*)( lParam ) ).Ref() ); OnMenuSelect( Window, refMenu, wIndex, wFlags ); lResult = 0; bProcessed = true; } break; case COSWindow::wmMenuChar: { unsigned short wCharCode = LoWord( wParam ); unsigned short wMenuType = HiWord( wParam ); CMenu::refType refMenu = CMenu::FromHandle( CMenuHandle( 0, (void*)( lParam ) ).Ref() ); lResult = OnMenuChar( Window, refMenu, wCharCode, wMenuType ); bProcessed = true; } break; case COSWindow::wmNextMenu: { MDINextMenu* pNextMenu = reinterpret_cast< MDINextMenu* >( lParam ); CMenu::refType refMenuIn = CMenu::FromHandle( CMenuHandle( 0, (void*)( pNextMenu->hmenuIn ) ).Ref() ); CMenu::refType refMenuNext = CMenu::FromHandle( CMenuHandle( 0, (void*)( pNextMenu->hmenuNext ) ).Ref() ); OnNextMenu( Window, wParam, refMenuIn, refMenuNext ); bProcessed = true; } break; #if ( WINVER >= 0x0500 ) case COSWindow::wmMenuGetObject: { MenuGetObjectInfo* pMenuObjectInfo = reinterpret_cast< MenuGetObjectInfo* >( lParam ); lResult = OnGetObject( Window, pMenuObjectInfo ); bProcessed = true; } break; case COSWindow::wmMenuRButtonUp: { CMenu::refType refMenu = CMenu::FromHandle( CMenuHandle( 0, (void*)( lParam ) ).Ref() ); OnRButtonUp( Window, refMenu, wParam ); bProcessed = true; } break; case COSWindow::wmMenuCommand: { CMenu::refType refMenu = CMenu::FromHandle( CMenuHandle( 0, (void*)( lParam ) ).Ref() ); unsigned short wItemID = static_cast< unsigned short >( -1 ); int iIndex = 0; if( System().Information(QOR_PP_SHARED_OBJECT_ACCESS).IsWindows98orME() ) { wItemID = LoWord( wParam ); iIndex = static_cast< int >( HiWord( wParam ) ); } else { iIndex = wParam; } OnMenuCommand( Window, refMenu, iIndex, wItemID ); bProcessed = true; } break; case COSWindow::wmMenuDrag: { CMenu::refType refMenu = CMenu::FromHandle( CMenuHandle( 0, (void*)( lParam ) ).Ref() ); lResult = OnMenuDrag( Window, refMenu, static_cast< unsigned short >( wParam ) ); bProcessed = true; } break; #endif//( WINVER >= 0x0500 ) case COSWindow::wmCommand: { unsigned short wCode = HiWord( wParam ); if( wCode == 0 ) { unsigned short wMenuID = LoWord( wParam ); OnCommand( Window, wMenuID ); lResult = 0; bProcessed = true; } } break; } return bProcessed; }
//--------------------------------------------------------------------- LRESULT Window::WindowProcedure(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { #ifdef _DEBUG /* char buf[20]; sprintf(buf, "0x%x : ", hWnd); OutputDebugString(buf); */ PutWindowMessage(message, wParam, lParam); #endif if ( message==WM_CREATE ) { LPCREATESTRUCT pc = (LPCREATESTRUCT)lParam; Window* pw = (Window*)(pc->lpCreateParams); pw->mWnd = hWnd; ::SetWindowLong(hWnd, 0, (long)pw); bool b = pw->OnCreate(pc); gTaskbarCreatedMessage = ::RegisterWindowMessage(TEXT("TaskbarCreated")); return b ? 0 : -1; } // マウスホイール対応 if ( message == msgMOUSEWHEEL ) { message = WM_MOUSEWHEEL; DbgStr("MouseWheel fwKeys:%04x, zDelta:%d, xPos:%d, yPos:%d", LOWORD(wParam), (short)HIWORD(wParam), (short)LOWORD(lParam), (short)HIWORD(lParam) ); } Window* p=(Window*)(::GetWindowLong(hWnd, 0)); if ( p == NULL ) return ::DefWindowProc(hWnd, message, wParam, lParam); if ( message >= WM_USER && message <= 0x7FFF ) return p->OnUser(message, wParam, lParam); if ( message == gTaskbarCreatedMessage ) return p->OnTaskbarRestart(); switch ( message ) { case WM_PAINT: { PAINTSTRUCT thePS; HDC theDC = ::BeginPaint(hWnd, &thePS); if (theDC != NULL) { p->OnPaint(theDC); ::EndPaint(hWnd, &thePS); } } return 0; case WM_NCHITTEST: return p->OnNCHitTest(MAKEPOINT(lParam)); Handle(WM_ACTIVATE, OnActivate(LOWORD(wParam), HIWORD(wParam), (HWND)lParam)); Handle(WM_ACTIVATEAPP, OnActivateApp(BOOL(wParam), (DWORD)lParam)); Handle(WM_DISPLAYCHANGE, OnDisplayChange(LOWORD(lParam), HIWORD(lParam), wParam)); /*case WM_DISPLAYCHANGE: p->OnDisplayChange(LOWORD(lParam), HIWORD(lParam), wParam); break;*/ Handle(WM_COMMAND, OnCommand(HIWORD(wParam), LOWORD(wParam), (HWND)lParam)); Handle(WM_INITMENU, OnInitMenu(HMENU(wParam))); Handle(WM_CLOSE, OnClose()); Handle(WM_DESTROY, OnDestroy()); Handle(MM_MCINOTIFY, OnMCINotify(WORD(wParam), LONG(lParam))); Handle(WM_LBUTTONDOWN, OnLButtonDown(MAKEPOINT(lParam), wParam)); Handle(WM_MBUTTONDOWN, OnMButtonDown(MAKEPOINT(lParam), wParam)); Handle(WM_RBUTTONDOWN, OnRButtonDown(MAKEPOINT(lParam), wParam)); Handle(WM_LBUTTONUP, OnLButtonUp(MAKEPOINT(lParam), wParam)); Handle(WM_MBUTTONUP, OnMButtonUp(MAKEPOINT(lParam), wParam)); Handle(WM_RBUTTONUP, OnRButtonUp(MAKEPOINT(lParam), wParam)); Handle(WM_LBUTTONDBLCLK, OnLButtonDoubleClick(MAKEPOINT(lParam), wParam)); Handle(WM_MBUTTONDBLCLK, OnMButtonDoubleClick(MAKEPOINT(lParam), wParam)); Handle(WM_RBUTTONDBLCLK, OnRButtonDoubleClick(MAKEPOINT(lParam), wParam)); Handle(WM_MOUSEMOVE, OnMouseMove(MAKEPOINT(lParam), wParam)); Handle(WM_MOUSEWHEEL, OnMouseWheel(LOWORD(wParam), (short)HIWORD(wParam), (short)LOWORD(lParam), (short)HIWORD(lParam))); Handle(WM_NCLBUTTONDBLCLK, OnNCLButtonDoubleClick(wParam, MAKEPOINT(lParam))); Handle(WM_KEYDOWN, OnKeyDown((int)wParam, (long)lParam)); Handle(WM_KEYUP, OnKeyUp((int)wParam, (long)lParam)); Handle(WM_DROPFILES, OnDropFiles(HDROP(wParam))); Handle(WM_TIMER, OnTimer(wParam, (TIMERPROC*)lParam)); Handle(WM_DRAWCLIPBOARD, OnDrawClipboard()); Handle(WM_CHANGECBCHAIN, OnChangeCBChain((HWND)wParam, (HWND)lParam)); default: break; } return ::DefWindowProc(hWnd, message, wParam, lParam); }