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);
}
示例#3
0
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
}
示例#4
0
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;
}
示例#5
0
//-------------------------------------------
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);
}
示例#6
0
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;
}
示例#7
0
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;
}
示例#8
0
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;
}
示例#9
0
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;
}
示例#10
0
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;
}