LRESULT DispCommand(LPCMDI lpcmdi, HWND hwnd, WPARAM wparam, LPARAM lparam) { WORD wCommand = GET_WM_COMMAND_ID(wparam, lparam); int icmd = 0; CMD *rgcmd = lpcmdi->rgcmd; int ccmd = lpcmdi->ccmd; // Message packing of wparam and lparam have changed for Win32, // so use the GET_WM_COMMAND macro to unpack the commnad for (icmd = 0; icmd < ccmd; icmd++) { if (rgcmd[icmd].wCommand == wCommand) { return rgcmd[icmd].pfncmd(hwnd, wCommand, GET_WM_COMMAND_CMD(wparam, lparam), GET_WM_COMMAND_HWND(wparam, lparam)); } } return DispDefault(lpcmdi->edwp, hwnd, WM_COMMAND, wparam, lparam); }
LRESULT CALLBACK CTSFMainWnd::_WndProc( HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam) { CTSFMainWnd *pThis = (CTSFMainWnd*)GetWindowLongPtr(hWnd, THIS_POINTER_OFFSET); if((NULL == pThis) && (uMessage != WM_NCCREATE)) { return DefWindowProc(hWnd, uMessage, wParam, lParam); } switch (uMessage) { case WM_NCCREATE: { LPCREATESTRUCT lpcs = (LPCREATESTRUCT)lParam; pThis = (CTSFMainWnd*)(lpcs->lpCreateParams); SetWindowLongPtr(hWnd, THIS_POINTER_OFFSET, (LONG_PTR)pThis); //set the window handle pThis->m_hWnd = hWnd; } break; case WM_CREATE: return pThis->_OnCreate(); case WM_SIZE: return pThis->_OnSize(LOWORD(lParam), HIWORD(lParam)); case WM_DESTROY: return pThis->_OnDestroy(); case WM_SETFOCUS: return pThis->_OnSetFocus(); case WM_KILLFOCUS: return pThis->_OnKillFocus(); case WM_ACTIVATE: return pThis->_OnActivate(wParam); case WM_INITMENUPOPUP: return pThis->_OnInitMenuPopup(wParam, lParam); case WM_COMMAND: return pThis->_OnCommand( GET_WM_COMMAND_ID(wParam, lParam), GET_WM_COMMAND_CMD(wParam, lParam), GET_WM_COMMAND_HWND(wParam, lParam)); case WM_NCDESTROY: pThis->m_hWnd = NULL; break; } return DefWindowProc(hWnd, uMessage, wParam, lParam); }
static bool IsToolBarCommand( gui_window *wnd, WPI_PARAM1 wparam, WPI_PARAM2 lparam ) { #ifdef __NT__ return( wnd != NULL && wnd->toolbar != NULL && wnd->toolbar->hdl != NULL && GET_WM_COMMAND_HWND( wparam, lparam ) == ToolBarWindow( wnd->toolbar->hdl ) ); #else return( FALSE ); #endif }
LRESULT CALLBACK CSEShellView::WndProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam) { static bool bLBDown = false; CSEShellView *pThis = (CSEShellView *)(LONG_PTR)::GetWindowLong(hWnd, GWLP_USERDATA); LRESULT lret = 0; if ( orgProc ) { lret = CallWindowProc( orgProc, hWnd, uMessage, wParam, lParam ); } else { lret = DefWindowProc( hWnd, uMessage, wParam, lParam ); } if ( WM_COMMAND == uMessage && pThis ) { pThis->OnCommand(GET_WM_COMMAND_ID(wParam, lParam), GET_WM_COMMAND_CMD(wParam, lParam), GET_WM_COMMAND_HWND(wParam, lParam)); } else if ( WM_LBUTTONDBLCLK == uMessage && pThis ) { NMHDR nmhdr = {0}; nmhdr.code = NM_DBLCLK; pThis->OnNotify( &nmhdr ); } else if ( WM_RBUTTONDOWN == uMessage && pThis ) { NMHDR nmhdr = {0}; nmhdr.code = NM_RCLICK; pThis->OnNotify( &nmhdr ); } else if ( WM_SIZE == uMessage && pThis ) { InvalidateRect( pThis->m_hWnd, NULL, true ); UpdateWindow(pThis->m_hWnd); } return lret; }
//------------------------------------------- BOOL CExpandDialog::onCommand(WPARAM wParam, LPARAM lParam) { HWND hwndCtl; int id; UINT codeNotify; // crack the WM_COMMAND message id = GET_WM_COMMAND_ID(wParam,lParam); hwndCtl = GET_WM_COMMAND_HWND(wParam,lParam); codeNotify = GET_WM_COMMAND_CMD(wParam,lParam); // if the "Advanced" button was clicked, then call the // message handler. if ((id == m_nIDButton) && (codeNotify==BN_CLICKED)) { onClickAdvanced(); } return CVirDialog::onCommand(wParam, lParam); }
BOOL CALLBACK SendOfferDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { static HWND hwndSend, hwndReceive; /* Subwindows */ switch (message) { case WM_INITDIALOG: hSendOfferDlg = hDlg; CenterWindow(hDlg, hMain); hwndSend = GetDlgItem(hDlg, IDC_OFFERSEND); hwndReceive = GetDlgItem(hDlg, IDC_OFFERRECEIVE); SendMessage(hDlg, BK_SETDLGFONTS, 0, 0); // Set up owner drawn boxes SetWindowLong(hwndSend, GWL_USERDATA, OD_DRAWOBJ); SetWindowLong(hwndReceive, GWL_USERDATA, OD_DRAWOBJ); SendInfo = (SendOfferDialogStruct *) lParam; /* Display offered items in list */ ItemListSetContents(hwndSend, SendInfo->items, TRUE); // boolean is to list quantities /* Subclass list boxes */ lpfnDefListProc = SubclassWindow(hwndSend, OfferListProc); SubclassWindow(hwndReceive, OfferListProc); /* Display receiver's name */ Edit_SetText(GetDlgItem(hDlg, IDC_OFFEREDIT), LookupNameRsc(SendInfo->receiver_name)); /* Gray out "Accept" button until counteroffer arrives */ ShowWindow(hwndReceive, SW_HIDE); EnableWindow(GetDlgItem(hDlg, IDOK), FALSE); return TRUE; case WM_ACTIVATE: if (wParam == 0) hCurrentDlg = NULL; else hCurrentDlg = hDlg; return TRUE; case BK_SETDLGFONTS: SetWindowFont(GetDlgItem(hDlg, IDC_OFFEREDIT), GetFont(FONT_LIST), TRUE); return TRUE; case BK_SETDLGCOLORS: InvalidateRect(hDlg, NULL, TRUE); return TRUE; case WM_COMPAREITEM: return ItemListCompareItem(hDlg, (const COMPAREITEMSTRUCT *) lParam); case WM_MEASUREITEM: ItemListMeasureItem(hDlg, (MEASUREITEMSTRUCT *) lParam); return TRUE; case WM_DRAWITEM: return ItemListDrawItemNoSelect(hDlg, (const DRAWITEMSTRUCT *)(lParam)); HANDLE_MSG(hDlg, WM_CTLCOLOREDIT, DialogCtlColor); HANDLE_MSG(hDlg, WM_CTLCOLORLISTBOX, DialogCtlColor); HANDLE_MSG(hDlg, WM_CTLCOLORSTATIC, DialogCtlColor); HANDLE_MSG(hDlg, WM_CTLCOLORDLG, DialogCtlColor); HANDLE_MSG(hDlg, WM_INITMENUPOPUP, InitMenuPopupHandler); case BK_COUNTEROFFER: /* Update receive list */ receive_items = (list_type) lParam; ItemListSetContents(hwndReceive, receive_items, True); /* Enable Accept button */ ShowWindow(hwndReceive, SW_NORMAL); EnableWindow(GetDlgItem(hDlg, IDOK), TRUE); SetWindowText(GetDlgItem(hDlg, IDC_MESSAGE), GetString(hInst, IDS_GOTOFFER)); return TRUE; case WM_CLOSE: SendCancelOffer(); /* fall through */ case BK_OFFERDONE: SendOfferEndDialog(hDlg); break; case WM_COMMAND: switch(GET_WM_COMMAND_ID(wParam, lParam)) { case IDC_OFFERSEND: case IDC_OFFERRECEIVE: /* Double click ==> look at item */ if (GET_WM_COMMAND_CMD(wParam, lParam) == LBN_DBLCLK) { RequestLook(ItemListGetId(GET_WM_COMMAND_HWND(wParam, lParam))); SetDescParams(hDlg, DESC_NONE); } return TRUE; case IDCANCEL: SendCancelOffer(); SendOfferEndDialog(hDlg); return TRUE; case IDOK: SendAcceptOffer(); SendOfferEndDialog(hDlg); return TRUE; } break; } return FALSE; }
BOOL CALLBACK RcvOfferDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { static HWND hwndSend, hwndReceive; switch (message) { case WM_INITDIALOG: CenterWindow(hDlg, hMain); hwndSend = GetDlgItem(hDlg, IDC_OFFERSEND); hwndReceive = GetDlgItem(hDlg, IDC_OFFERRECEIVE); SendMessage(hDlg, BK_SETDLGFONTS, 0, 0); // Set up owner drawn boxes SetWindowLong(hwndSend, GWL_USERDATA, OD_DRAWOBJ); SetWindowLong(hwndReceive, GWL_USERDATA, OD_DRAWOBJ); RcvInfo = (RcvOfferDialogStruct *) lParam; /* Display offered items in list */ ItemListSetContents(hwndReceive, RcvInfo->items, True); /* Subclass list boxes */ lpfnDefListProc = (WNDPROC) GetWindowLong(hwndSend, GWL_WNDPROC); SubclassWindow(hwndSend, OfferListProc); SubclassWindow(hwndReceive, OfferListProc); /* Display receiver's name */ Edit_SetText(GetDlgItem(hDlg, IDC_OFFEREDIT), LookupNameRsc(RcvInfo->sender_name)); ShowWindow(hDlg, SW_HIDE); hRcvOfferDlg = hDlg; return TRUE; case WM_ACTIVATE: if (wParam == 0) hCurrentDlg = NULL; else hCurrentDlg = hDlg; return TRUE; case BK_SETDLGFONTS: SetWindowFont(GetDlgItem(hDlg, IDC_OFFEREDIT), GetFont(FONT_LIST), TRUE); return TRUE; case BK_SETDLGCOLORS: InvalidateRect(hDlg, NULL, TRUE); return TRUE; case WM_COMPAREITEM: return ItemListCompareItem(hDlg, (const COMPAREITEMSTRUCT *) lParam); case WM_MEASUREITEM: ItemListMeasureItem(hDlg, (MEASUREITEMSTRUCT *) lParam); return TRUE; case WM_DRAWITEM: return ItemListDrawItemNoSelect(hDlg, (const DRAWITEMSTRUCT *)(lParam)); HANDLE_MSG(hDlg, WM_CTLCOLOREDIT, DialogCtlColor); HANDLE_MSG(hDlg, WM_CTLCOLORLISTBOX, DialogCtlColor); HANDLE_MSG(hDlg, WM_CTLCOLORSTATIC, DialogCtlColor); HANDLE_MSG(hDlg, WM_CTLCOLORDLG, DialogCtlColor); HANDLE_MSG(hDlg, WM_INITMENUPOPUP, InitMenuPopupHandler); case WM_CLOSE: SendCancelOffer(); /* fall through */ case BK_OFFERDONE: RcvOfferEndDialog(hDlg); return TRUE; case BK_COUNTEROFFERED: /* Display items we counteroffered */ send_items = (list_type) lParam; ItemListSetContents(hwndSend, send_items, True); return TRUE; case WM_COMMAND: switch(GET_WM_COMMAND_ID(wParam, lParam)) { case IDC_OFFERSEND: case IDC_OFFERRECEIVE: /* Double click ==> look at item */ if (GET_WM_COMMAND_CMD(wParam, lParam) == LBN_DBLCLK) { RequestLook(ItemListGetId(GET_WM_COMMAND_HWND(wParam, lParam))); SetDescParams(hDlg, DESC_NONE); } return TRUE; case IDC_SETITEMS: /* Close any other look dialogs that are up */ AbortLookList(); /* Get list of items from inventory & tell server */ send_items = UserInventoryList(hDlg, GetString(hInst, IDS_OFFERITEMS)); /* fall through */ case IDOK: /* Send counteroffer */ RequestCounteroffer(send_items); send_items = ObjectListDestroy(send_items); EnableWindow(GetDlgItem(hDlg, IDOK), FALSE); EnableWindow(GetDlgItem(hDlg, IDC_SETITEMS), FALSE); SetWindowText(GetDlgItem(hDlg, IDC_MESSAGE), GetString(hInst, IDS_WAITRESPONSE)); return TRUE; case IDCANCEL: SendCancelOffer(); RcvOfferEndDialog(hDlg); return TRUE; } break; } return FALSE; }
INT_PTR CALLBACK WepWindowsPageProc( _In_ HWND hwndDlg, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam ) { PWINDOWS_CONTEXT context; LPPROPSHEETPAGE propSheetPage; PPH_PROCESS_PROPPAGECONTEXT propPageContext; PPH_PROCESS_ITEM processItem; if (PhPropPageDlgProcHeader(hwndDlg, uMsg, lParam, &propSheetPage, &propPageContext, &processItem)) { context = propPageContext->Context; } else { return FALSE; } switch (uMsg) { case WM_INITDIALOG: { context->TreeNewHandle = GetDlgItem(hwndDlg, IDC_LIST); context->SearchBoxHandle = GetDlgItem(hwndDlg, IDC_SEARCHEDIT); PhCreateSearchControl(hwndDlg, context->SearchBoxHandle, L"Search Windows (Ctrl+K)"); WeInitializeWindowTree(hwndDlg, context->TreeNewHandle, &context->TreeContext); PhRegisterDialog(hwndDlg); PhInitializeLayoutManager(&context->LayoutManager, hwndDlg); PhAddLayoutItem(&context->LayoutManager, GetDlgItem(hwndDlg, IDC_SEARCHEDIT), NULL, PH_ANCHOR_TOP | PH_ANCHOR_RIGHT); PhAddLayoutItem(&context->LayoutManager, GetDlgItem(hwndDlg, IDC_LIST), NULL, PH_ANCHOR_ALL); WepRefreshWindows(context); } break; case WM_SHOWWINDOW: { if (PhBeginPropPageLayout(hwndDlg, propPageContext)) PhEndPropPageLayout(hwndDlg, propPageContext); } break; case WM_DESTROY: { PhDeleteLayoutManager(&context->LayoutManager); PhUnregisterDialog(hwndDlg); WeDeleteWindowTree(&context->TreeContext); WepDeleteWindowSelector(&context->Selector); PhFree(context); } break; case WM_COMMAND: { switch (GET_WM_COMMAND_CMD(wParam, lParam)) { case EN_CHANGE: { PPH_STRING newSearchboxText; if (GET_WM_COMMAND_HWND(wParam, lParam) != context->SearchBoxHandle) break; newSearchboxText = PH_AUTO(PhGetWindowText(context->SearchBoxHandle)); if (!PhEqualString(context->TreeContext.SearchboxText, newSearchboxText, FALSE)) { PhSwapReference(&context->TreeContext.SearchboxText, newSearchboxText); if (!PhIsNullOrEmptyString(context->TreeContext.SearchboxText)) WeExpandAllWindowNodes(&context->TreeContext, TRUE); PhApplyTreeNewFilters(&context->TreeContext.FilterSupport); TreeNew_NodesStructured(context->TreeNewHandle); // PhInvokeCallback(&SearchChangedEvent, SearchboxText); } } break; } switch (GET_WM_COMMAND_ID(wParam, lParam)) { case IDC_REFRESH: WepRefreshWindows(context); break; case ID_SHOWCONTEXTMENU: { PPH_TREENEW_CONTEXT_MENU contextMenuEvent = (PPH_TREENEW_CONTEXT_MENU)lParam; PWE_WINDOW_NODE *windows; ULONG numberOfWindows; PPH_EMENU menu; PPH_EMENU selectedItem; WeGetSelectedWindowNodes( &context->TreeContext, &windows, &numberOfWindows ); if (numberOfWindows != 0) { menu = PhCreateEMenu(); PhLoadResourceEMenuItem(menu, PluginInstance->DllBase, MAKEINTRESOURCE(IDR_WINDOW), 0); PhInsertCopyCellEMenuItem(menu, ID_WINDOW_COPY, context->TreeNewHandle, contextMenuEvent->Column); PhSetFlagsEMenuItem(menu, ID_WINDOW_PROPERTIES, PH_EMENU_DEFAULT, PH_EMENU_DEFAULT); if (numberOfWindows == 1) { WINDOWPLACEMENT placement = { sizeof(placement) }; BYTE alpha; ULONG flags; ULONG i; ULONG id; // State GetWindowPlacement(windows[0]->WindowHandle, &placement); if (placement.showCmd == SW_MINIMIZE) PhSetFlagsEMenuItem(menu, ID_WINDOW_MINIMIZE, PH_EMENU_DISABLED, PH_EMENU_DISABLED); else if (placement.showCmd == SW_MAXIMIZE) PhSetFlagsEMenuItem(menu, ID_WINDOW_MAXIMIZE, PH_EMENU_DISABLED, PH_EMENU_DISABLED); else if (placement.showCmd == SW_NORMAL) PhSetFlagsEMenuItem(menu, ID_WINDOW_RESTORE, PH_EMENU_DISABLED, PH_EMENU_DISABLED); // Visible PhSetFlagsEMenuItem(menu, ID_WINDOW_VISIBLE, PH_EMENU_CHECKED, (GetWindowLong(windows[0]->WindowHandle, GWL_STYLE) & WS_VISIBLE) ? PH_EMENU_CHECKED : 0); // Enabled PhSetFlagsEMenuItem(menu, ID_WINDOW_ENABLED, PH_EMENU_CHECKED, !(GetWindowLong(windows[0]->WindowHandle, GWL_STYLE) & WS_DISABLED) ? PH_EMENU_CHECKED : 0); // Always on Top PhSetFlagsEMenuItem(menu, ID_WINDOW_ALWAYSONTOP, PH_EMENU_CHECKED, (GetWindowLong(windows[0]->WindowHandle, GWL_EXSTYLE) & WS_EX_TOPMOST) ? PH_EMENU_CHECKED : 0); // Opacity if (GetLayeredWindowAttributes(windows[0]->WindowHandle, NULL, &alpha, &flags)) { if (!(flags & LWA_ALPHA)) alpha = 255; } else { alpha = 255; } if (alpha == 255) { id = ID_OPACITY_OPAQUE; } else { id = 0; // Due to integer division, we cannot use simple arithmetic to calculate which menu item to check. for (i = 0; i < 10; i++) { if (alpha == (BYTE)(255 * (i + 1) / 10)) { id = ID_OPACITY_10 + i; break; } } } if (id != 0) { PhSetFlagsEMenuItem(menu, id, PH_EMENU_CHECKED | PH_EMENU_RADIOCHECK, PH_EMENU_CHECKED | PH_EMENU_RADIOCHECK); } } else { PhSetFlagsAllEMenuItems(menu, PH_EMENU_DISABLED, PH_EMENU_DISABLED); PhSetFlagsEMenuItem(menu, ID_WINDOW_COPY, PH_EMENU_DISABLED, 0); } selectedItem = PhShowEMenu( menu, hwndDlg, PH_EMENU_SHOW_SEND_COMMAND | PH_EMENU_SHOW_LEFTRIGHT, PH_ALIGN_LEFT | PH_ALIGN_TOP, contextMenuEvent->Location.x, contextMenuEvent->Location.y ); if (selectedItem && selectedItem->Id != -1) { BOOLEAN handled = FALSE; handled = PhHandleCopyCellEMenuItem(selectedItem); } PhDestroyEMenu(menu); } } break; case ID_WINDOW_BRINGTOFRONT: { PWE_WINDOW_NODE selectedNode; if (selectedNode = WeGetSelectedWindowNode(&context->TreeContext)) { WINDOWPLACEMENT placement = { sizeof(placement) }; GetWindowPlacement(selectedNode->WindowHandle, &placement); if (placement.showCmd == SW_MINIMIZE) ShowWindowAsync(selectedNode->WindowHandle, SW_RESTORE); else SetForegroundWindow(selectedNode->WindowHandle); } } break; case ID_WINDOW_RESTORE: { PWE_WINDOW_NODE selectedNode; if (selectedNode = WeGetSelectedWindowNode(&context->TreeContext)) { ShowWindowAsync(selectedNode->WindowHandle, SW_RESTORE); } } break; case ID_WINDOW_MINIMIZE: { PWE_WINDOW_NODE selectedNode; if (selectedNode = WeGetSelectedWindowNode(&context->TreeContext)) { ShowWindowAsync(selectedNode->WindowHandle, SW_MINIMIZE); } } break; case ID_WINDOW_MAXIMIZE: { PWE_WINDOW_NODE selectedNode; if (selectedNode = WeGetSelectedWindowNode(&context->TreeContext)) { ShowWindowAsync(selectedNode->WindowHandle, SW_MAXIMIZE); } } break; case ID_WINDOW_CLOSE: { PWE_WINDOW_NODE selectedNode; if (selectedNode = WeGetSelectedWindowNode(&context->TreeContext)) { PostMessage(selectedNode->WindowHandle, WM_CLOSE, 0, 0); } } break; case ID_WINDOW_VISIBLE: { PWE_WINDOW_NODE selectedNode; if (selectedNode = WeGetSelectedWindowNode(&context->TreeContext)) { if (IsWindowVisible(selectedNode->WindowHandle)) { selectedNode->WindowVisible = FALSE; ShowWindowAsync(selectedNode->WindowHandle, SW_HIDE); } else { selectedNode->WindowVisible = TRUE; ShowWindowAsync(selectedNode->WindowHandle, SW_SHOW); } PhInvalidateTreeNewNode(&selectedNode->Node, TN_CACHE_COLOR); TreeNew_InvalidateNode(context->TreeNewHandle, &selectedNode->Node); } } break; case ID_WINDOW_ENABLED: { PWE_WINDOW_NODE selectedNode; if (selectedNode = WeGetSelectedWindowNode(&context->TreeContext)) { EnableWindow(selectedNode->WindowHandle, !IsWindowEnabled(selectedNode->WindowHandle)); } } break; case ID_WINDOW_ALWAYSONTOP: { PWE_WINDOW_NODE selectedNode; if (selectedNode = WeGetSelectedWindowNode(&context->TreeContext)) { LOGICAL topMost; topMost = GetWindowLong(selectedNode->WindowHandle, GWL_EXSTYLE) & WS_EX_TOPMOST; SetWindowPos(selectedNode->WindowHandle, topMost ? HWND_NOTOPMOST : HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE); } } break; case ID_OPACITY_10: case ID_OPACITY_20: case ID_OPACITY_30: case ID_OPACITY_40: case ID_OPACITY_50: case ID_OPACITY_60: case ID_OPACITY_70: case ID_OPACITY_80: case ID_OPACITY_90: case ID_OPACITY_OPAQUE: { PWE_WINDOW_NODE selectedNode; if (selectedNode = WeGetSelectedWindowNode(&context->TreeContext)) { ULONG opacity; opacity = ((ULONG)LOWORD(wParam) - ID_OPACITY_10) + 1; if (opacity == 10) { // Remove the WS_EX_LAYERED bit since it is not needed. PhSetWindowExStyle(selectedNode->WindowHandle, WS_EX_LAYERED, 0); RedrawWindow(selectedNode->WindowHandle, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN); } else { // Add the WS_EX_LAYERED bit so opacity will work. PhSetWindowExStyle(selectedNode->WindowHandle, WS_EX_LAYERED, WS_EX_LAYERED); SetLayeredWindowAttributes(selectedNode->WindowHandle, 0, (BYTE)(255 * opacity / 10), LWA_ALPHA); } } } break; case ID_WINDOW_HIGHLIGHT: { PWE_WINDOW_NODE selectedNode; if (selectedNode = WeGetSelectedWindowNode(&context->TreeContext)) { if (context->HighlightingWindow) { if (context->HighlightingWindowCount & 1) WeInvertWindowBorder(context->HighlightingWindow); } context->HighlightingWindow = selectedNode->WindowHandle; context->HighlightingWindowCount = 10; SetTimer(hwndDlg, 9, 100, NULL); } } break; case ID_WINDOW_GOTOTHREAD: { PWE_WINDOW_NODE selectedNode; PPH_PROCESS_ITEM processItem; PPH_PROCESS_PROPCONTEXT propContext; if (selectedNode = WeGetSelectedWindowNode(&context->TreeContext)) { if (processItem = PhReferenceProcessItem(selectedNode->ClientId.UniqueProcess)) { if (propContext = PhCreateProcessPropContext(WE_PhMainWndHandle, processItem)) { PhSetSelectThreadIdProcessPropContext(propContext, selectedNode->ClientId.UniqueThread); PhShowProcessProperties(propContext); PhDereferenceObject(propContext); } PhDereferenceObject(processItem); } else { PhShowError(hwndDlg, L"The process does not exist."); } } } break; case ID_WINDOW_PROPERTIES: { PWE_WINDOW_NODE selectedNode; if (selectedNode = WeGetSelectedWindowNode(&context->TreeContext)) WeShowWindowProperties(hwndDlg, selectedNode->WindowHandle); } break; case ID_WINDOW_COPY: { PPH_STRING text; text = PhGetTreeNewText(context->TreeNewHandle, 0); PhSetClipboardString(hwndDlg, &text->sr); PhDereferenceObject(text); } break; } } break; case WM_TIMER: { switch (wParam) { case 9: { WeInvertWindowBorder(context->HighlightingWindow); if (--context->HighlightingWindowCount == 0) KillTimer(hwndDlg, 9); } break; } } break; case WM_SIZE: PhLayoutManagerLayout(&context->LayoutManager); break; case WM_NOTIFY: { LPNMHDR header = (LPNMHDR)lParam; switch (header->code) { case PSN_QUERYINITIALFOCUS: SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, (LPARAM)GetDlgItem(hwndDlg, IDC_REFRESH)); return TRUE; } } break; } return FALSE; }
static LRESULT FAR PASCAL FindDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { HWND hWnd; HDC hDC; HBRUSH hBrush; RECT rcClient; FINDREPLACE *cf; UINT uiRet = 0; static UINT uiHelpMsg, uiFindMsg; cf = (FINDREPLACE *)GetWindowLong(hDlg,DWL_LPARAM); if ( message != WM_INITDIALOG && cf->Flags & FR_ENABLEHOOK ) { uiRet = LOWORD(cf->lpfnHook(hDlg,message,wParam,lParam)); if ( uiRet ) return (LRESULT)uiRet; } SetWindowLong(hDlg, DWL_MSGRESULT, (LPARAM)0); switch(message) { case WM_INITDIALOG: SendDlgItemMessage(hDlg, edt1, WM_SETTEXT, strlen(cf->lpstrFindWhat), (LPARAM)cf->lpstrFindWhat); /* Show/hide the whole word stuff */ if(cf->Flags & FR_HIDEWHOLEWORD) ShowWindow(GetDlgItem(hDlg, chx1), SW_HIDE); else { if(cf->Flags & FR_WHOLEWORD) CheckDlgButton(hDlg,chx1,TRUE); if(cf->Flags & FR_NOWHOLEWORD) EnableWindow(GetDlgItem(hDlg, chx1), FALSE); } /* Show/hide the matchcase stuff */ if(cf->Flags & FR_HIDEMATCHCASE) ShowWindow(GetDlgItem(hDlg, chx2), SW_HIDE); else { if(cf->Flags & FR_MATCHCASE) CheckDlgButton(hDlg,chx2,TRUE); if(cf->Flags & FR_NOMATCHCASE) EnableWindow(GetDlgItem(hDlg, chx2), FALSE); } /* show/tell the up/down group and controls */ if(cf->Flags & FR_HIDEUPDOWN) { ShowWindow(GetDlgItem(hDlg, rad1), SW_HIDE); ShowWindow(GetDlgItem(hDlg, rad2), SW_HIDE); ShowWindow(GetDlgItem(hDlg, grp1), SW_HIDE); } else { if (cf->Flags & FR_DOWN) CheckRadioButton(hDlg, rad1, rad2, rad2); else CheckRadioButton(hDlg, rad1, rad2, rad1); if(cf->Flags & FR_NOUPDOWN) { EnableWindow(GetDlgItem(hDlg, rad1), FALSE); EnableWindow(GetDlgItem(hDlg, rad2), FALSE); EnableWindow(GetDlgItem(hDlg, grp1), FALSE); } } if ( !(cf->Flags & FR_SHOWHELP) ) ShowWindow(GetDlgItem(hDlg, pshHelp), SW_HIDE); else uiHelpMsg = RegisterWindowMessage(HELPMSGSTRING); uiFindMsg = RegisterWindowMessage(FINDMSGSTRING); if ( !strlen(cf->lpstrFindWhat) ) EnableWindow(GetDlgItem(hDlg, IDOK), FALSE); if ( cf->Flags & FR_ENABLEHOOK ) cf->lpfnHook(hDlg, message, wParam, lParam); return TRUE; case WM_COMMAND: cf->Flags &= ~(FR_FINDNEXT|FR_REPLACE|FR_REPLACEALL); cf->Flags &= ~(FR_DOWN|FR_WHOLEWORD|FR_MATCHCASE); if ( GET_WM_COMMAND_ID(wParam,lParam) == edt1 && GET_WM_COMMAND_CMD(wParam,lParam) == EN_CHANGE ) { SendMessage(GET_WM_COMMAND_HWND(wParam,lParam), WM_GETTEXT, cf->wFindWhatLen, (LPARAM)cf->lpstrFindWhat); hWnd = GetDlgItem(hDlg, IDOK); if ( strlen(cf->lpstrFindWhat) ) { if ( !IsWindowEnabled(hWnd) ) EnableWindow(hWnd, TRUE); } else { if ( IsWindowEnabled(hWnd) ) EnableWindow(hWnd, FALSE); } SetWindowLong(hDlg, DWL_MSGRESULT, (LPARAM)0); return TRUE; } if (GET_WM_COMMAND_ID(wParam,lParam) == IDOK) { if ( IsDlgButtonChecked(hDlg, rad2) ) cf->Flags |= FR_DOWN; if ( IsDlgButtonChecked(hDlg, chx1) ) cf->Flags |= FR_WHOLEWORD; if ( IsDlgButtonChecked(hDlg, chx2) ) cf->Flags |= FR_MATCHCASE; cf->Flags |= FR_FINDNEXT; SendMessage(cf->hwndOwner,uiFindMsg,0,(LPARAM)cf); SetWindowLong(hDlg, DWL_MSGRESULT, (LPARAM)0); return TRUE; } if (GET_WM_COMMAND_ID(wParam,lParam) == IDCANCEL) { cf->Flags = FR_DIALOGTERM; SendMessage(cf->hwndOwner, uiFindMsg, 0, (LPARAM)cf); SetWindowLong(hDlg, DWL_MSGRESULT, (LPARAM)0); DestroyWindow(hDlg); return FALSE; } if (GET_WM_COMMAND_ID(wParam,lParam) == pshHelp) { SendMessage(cf->hwndOwner,uiHelpMsg,0,0); SetWindowLong(hDlg, DWL_MSGRESULT, (LPARAM)0); return TRUE; } break; case WM_ERASEBKGND: { hDC = GetDC(hDlg); hBrush = (HBRUSH)SendMessage(hDlg, GET_WM_CTLCOLOR_MSG(CTLCOLOR_DLG), GET_WM_CTLCOLOR_MPS(hDC,hDlg,CTLCOLOR_DLG)); if (hBrush) { GetClientRect(hDlg, &rcClient); FillRect((HDC)wParam, &rcClient, hBrush); ReleaseDC(hDlg, hDC); SetWindowLong(hDlg, DWL_MSGRESULT, (LPARAM)TRUE); return TRUE; } else { ReleaseDC(hDlg,hDC); SetWindowLong(hDlg, DWL_MSGRESULT, (LPARAM)FALSE); return FALSE; } } default: break; } return FALSE; }
static intptr_t InternalColumnDialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam, int nColumnMax, int *shown, int *order, const wchar_t* const *names, void (*pfnGetRealColumnOrder)(int *), void (*pfnGetColumnInfo)(int *pnOrder, int *pnShown), void (*pfnSetColumnInfo)(int *pnOrder, int *pnShown)) { RECT rectClient; LVCOLUMN LVCol; int nShown = 0; int nAvail = 0; LVITEM lvi; switch (uMsg) { case WM_INITDIALOG: CenterWindow(hDlg); hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_MAMEUI_ICON)); SendMessage(hDlg, WM_SETICON, ICON_SMALL, (LPARAM)hIcon); hBrush = CreateSolidBrush(RGB(240, 240, 240)); hShown = GetDlgItem(hDlg, IDC_LISTSHOWCOLUMNS); hAvailable = GetDlgItem(hDlg, IDC_LISTAVAILABLECOLUMNS); SetWindowTheme(hShown, L"Explorer", NULL); SetWindowTheme(hAvailable, L"Explorer", NULL); if(IsWindowsSevenOrHigher()) { (void)ListView_SetExtendedListViewStyle(hShown, LVS_EX_FULLROWSELECT | LVS_EX_ONECLICKACTIVATE | LVS_EX_DOUBLEBUFFER); (void)ListView_SetExtendedListViewStyle(hAvailable, LVS_EX_FULLROWSELECT | LVS_EX_ONECLICKACTIVATE | LVS_EX_DOUBLEBUFFER); } else { (void)ListView_SetExtendedListViewStyle(hShown, LVS_EX_FULLROWSELECT | LVS_EX_UNDERLINEHOT | LVS_EX_ONECLICKACTIVATE | LVS_EX_DOUBLEBUFFER); (void)ListView_SetExtendedListViewStyle(hAvailable, LVS_EX_FULLROWSELECT | LVS_EX_UNDERLINEHOT | LVS_EX_ONECLICKACTIVATE | LVS_EX_DOUBLEBUFFER); } GetClientRect(hShown, &rectClient); memset(&LVCol, 0, sizeof(LVCOLUMN)); LVCol.mask = LVCF_WIDTH; LVCol.cx = rectClient.right - rectClient.left; (void)ListView_InsertColumn(hShown, 0, &LVCol); (void)ListView_InsertColumn(hAvailable, 0, &LVCol); pfnGetColumnInfo(order, shown); showMsg = true; nShown = 0; nAvail = 0; lvi.mask = LVIF_TEXT | LVIF_PARAM | LVIF_IMAGE; lvi.stateMask = 0; lvi.iSubItem = 0; lvi.iImage = -1; /* Get the Column Order and save it */ pfnGetRealColumnOrder(order); for (int i = 0 ; i < nColumnMax; i++) { lvi.pszText = (wchar_t*)names[order[i]]; lvi.lParam = order[i]; if (shown[order[i]]) { lvi.iItem = nShown; (void)ListView_InsertItem(hShown, &lvi); nShown++; } else { lvi.iItem = nAvail; (void)ListView_InsertItem(hAvailable, &lvi); nAvail++; } } if(nShown > 0) /*Set to Second, because first is not allowed*/ ListView_SetItemState(hShown, 1, LVIS_FOCUSED | LVIS_SELECTED, LVIS_FOCUSED | LVIS_SELECTED); if(nAvail > 0) ListView_SetItemState(hAvailable, 0, LVIS_FOCUSED | LVIS_SELECTED, LVIS_FOCUSED | LVIS_SELECTED); EnableWindow(GetDlgItem(hDlg, IDC_BUTTONADD), true); return true; case WM_CTLCOLORDLG: return (LRESULT) hBrush; case WM_CTLCOLORSTATIC: case WM_CTLCOLORBTN: hDC = (HDC)wParam; SetBkMode(hDC, TRANSPARENT); SetTextColor(hDC, GetSysColor(COLOR_WINDOWTEXT)); return (LRESULT) hBrush; case WM_NOTIFY: { NMHDR *nm = (NMHDR *)lParam; NM_LISTVIEW *pnmv; int nPos = 0; switch (nm->code) { case NM_DBLCLK: // Do Data Exchange here, which ListView was double clicked? switch (nm->idFrom) { case IDC_LISTAVAILABLECOLUMNS: // Move selected Item from Available to Shown column nPos = DoExchangeItem(hAvailable, hShown, 0); if (nPos) { EnableWindow(GetDlgItem(hDlg, IDC_BUTTONADD), false); EnableWindow(GetDlgItem(hDlg, IDC_BUTTONREMOVE), true); EnableWindow(GetDlgItem(hDlg, IDC_BUTTONMOVEUP), true); EnableWindow(GetDlgItem(hDlg, IDC_BUTTONMOVEDOWN), false); } break; case IDC_LISTSHOWCOLUMNS: // Move selected Item from Show to Available column if (DoExchangeItem(hShown, hAvailable, 1)) { EnableWindow(GetDlgItem(hDlg, IDC_BUTTONADD), true); EnableWindow(GetDlgItem(hDlg, IDC_BUTTONREMOVE), false); EnableWindow(GetDlgItem(hDlg, IDC_BUTTONMOVEUP), false); EnableWindow(GetDlgItem(hDlg, IDC_BUTTONMOVEDOWN), false); } break; } return true; case LVN_ITEMCHANGED: // Don't handle this message for now pnmv = (NM_LISTVIEW *)nm; if (pnmv->uNewState & LVIS_SELECTED) { if (pnmv->iItem == 0 && pnmv->hdr.idFrom == IDC_LISTSHOWCOLUMNS) { // Don't allow selecting the first item ListView_SetItemState(hShown, pnmv->iItem, LVIS_FOCUSED | LVIS_SELECTED, LVIS_FOCUSED | LVIS_SELECTED); if (showMsg) { ErrorMessageBox("Changing this item is not permitted"); showMsg = false; } EnableWindow(GetDlgItem(hDlg, IDC_BUTTONREMOVE), false); EnableWindow(GetDlgItem(hDlg, IDC_BUTTONMOVEUP), false); EnableWindow(GetDlgItem(hDlg, IDC_BUTTONMOVEDOWN), false); return true; } else showMsg = true; } if( pnmv->uOldState & LVIS_SELECTED && pnmv->iItem == 0 && pnmv->hdr.idFrom == IDC_LISTSHOWCOLUMNS) { /*we enable the buttons again, if the first Entry loses selection*/ EnableWindow(GetDlgItem(hDlg, IDC_BUTTONREMOVE), true); EnableWindow(GetDlgItem(hDlg, IDC_BUTTONMOVEUP), true); EnableWindow(GetDlgItem(hDlg, IDC_BUTTONMOVEDOWN), true); } break; case NM_SETFOCUS: switch (nm->idFrom) { case IDC_LISTAVAILABLECOLUMNS: if (ListView_GetItemCount(nm->hwndFrom) != 0) { EnableWindow(GetDlgItem(hDlg, IDC_BUTTONADD), true); EnableWindow(GetDlgItem(hDlg, IDC_BUTTONREMOVE), false); EnableWindow(GetDlgItem(hDlg, IDC_BUTTONMOVEDOWN), false); EnableWindow(GetDlgItem(hDlg, IDC_BUTTONMOVEUP), false); } break; case IDC_LISTSHOWCOLUMNS: if (ListView_GetItemCount(nm->hwndFrom) != 0) { EnableWindow(GetDlgItem(hDlg, IDC_BUTTONADD), false); if (ListView_GetNextItem(hShown, -1, LVIS_SELECTED | LVIS_FOCUSED) == 0) { EnableWindow(GetDlgItem(hDlg, IDC_BUTTONREMOVE), false); EnableWindow(GetDlgItem(hDlg, IDC_BUTTONMOVEDOWN), false); EnableWindow(GetDlgItem(hDlg, IDC_BUTTONMOVEUP), false); } else { EnableWindow(GetDlgItem(hDlg, IDC_BUTTONREMOVE), true); EnableWindow(GetDlgItem(hDlg, IDC_BUTTONMOVEDOWN), true); EnableWindow(GetDlgItem(hDlg, IDC_BUTTONMOVEUP), true); } } break; } break; case LVN_KEYDOWN: case NM_CLICK: pnmv = (NM_LISTVIEW *)nm; if (pnmv->uNewState & LVIS_SELECTED) { if (pnmv->iItem == 0 && pnmv->hdr.idFrom == IDC_LISTSHOWCOLUMNS) { // nothing to do here... } } switch (nm->idFrom) { case IDC_LISTAVAILABLECOLUMNS: if (ListView_GetItemCount(nm->hwndFrom) != 0) { EnableWindow(GetDlgItem(hDlg, IDC_BUTTONADD), true); EnableWindow(GetDlgItem(hDlg, IDC_BUTTONREMOVE), false); EnableWindow(GetDlgItem(hDlg, IDC_BUTTONMOVEDOWN), false); EnableWindow(GetDlgItem(hDlg, IDC_BUTTONMOVEUP), false); } break; case IDC_LISTSHOWCOLUMNS: if (ListView_GetItemCount(nm->hwndFrom) != 0) { EnableWindow(GetDlgItem(hDlg, IDC_BUTTONADD), false); if (ListView_GetNextItem(hShown, -1, LVIS_SELECTED | LVIS_FOCUSED) == 0) { EnableWindow(GetDlgItem(hDlg, IDC_BUTTONREMOVE), false); EnableWindow(GetDlgItem(hDlg, IDC_BUTTONMOVEDOWN), false); EnableWindow(GetDlgItem(hDlg, IDC_BUTTONMOVEUP), false); } else { EnableWindow(GetDlgItem(hDlg, IDC_BUTTONREMOVE), true); EnableWindow(GetDlgItem(hDlg, IDC_BUTTONMOVEDOWN), true); EnableWindow(GetDlgItem(hDlg, IDC_BUTTONMOVEUP), true); } } break; } return true; } } return false; case WM_COMMAND: { WORD wID = GET_WM_COMMAND_ID(wParam, lParam); HWND hWndCtrl = GET_WM_COMMAND_HWND(wParam, lParam); int nPos = 0; switch (wID) { case IDC_LISTSHOWCOLUMNS: break; case IDC_BUTTONADD: // Move selected Item in Available to Shown nPos = DoExchangeItem(hAvailable, hShown, 0); if (nPos) { EnableWindow(hWndCtrl,false); EnableWindow(GetDlgItem(hDlg, IDC_BUTTONREMOVE), true); EnableWindow(GetDlgItem(hDlg, IDC_BUTTONMOVEUP), true); EnableWindow(GetDlgItem(hDlg, IDC_BUTTONMOVEDOWN), false); } break; case IDC_BUTTONREMOVE: // Move selected Item in Show to Available if (DoExchangeItem(hShown, hAvailable, 1)) { EnableWindow(hWndCtrl,false); EnableWindow(GetDlgItem(hDlg, IDC_BUTTONADD), true); EnableWindow(GetDlgItem(hDlg, IDC_BUTTONMOVEUP), false); EnableWindow(GetDlgItem(hDlg, IDC_BUTTONMOVEDOWN), false); } break; case IDC_BUTTONMOVEDOWN: // Move selected item in the Show window up 1 item DoMoveItem(hShown, true); break; case IDC_BUTTONMOVEUP: // Move selected item in the Show window down 1 item DoMoveItem(hShown, false); break; case IDOK: { // Save users choices nShown = ListView_GetItemCount(hShown); nAvail = ListView_GetItemCount(hAvailable); int nCount = 0; for (int i = 0; i < nShown; i++) { lvi.iSubItem = 0; lvi.mask = LVIF_PARAM; lvi.pszText = 0; lvi.iItem = i; (void)ListView_GetItem(hShown, &lvi); order[nCount++] = lvi.lParam; shown[lvi.lParam] = true; } for (int i = 0; i < nAvail; i++) { lvi.iSubItem = 0; lvi.mask = LVIF_PARAM; lvi.pszText = 0; lvi.iItem = i; (void)ListView_GetItem(hAvailable, &lvi); order[nCount++] = lvi.lParam; shown[lvi.lParam] = false; } pfnSetColumnInfo(order, shown); DestroyIcon(hIcon); DeleteObject(hBrush); EndDialog(hDlg, 1); return true; } case IDCANCEL: DestroyIcon(hIcon); DeleteObject(hBrush); EndDialog(hDlg, 0); return true; } break; } } return false; }