簡體   English   中英

C ++ Win32編輯框光標不閃爍

[英]c++ win32 edit box cursor not flashing

我是Windows編程的新手,並且不斷遇到各種問題,大多數問題我都能自己解決。

我手頭的問題是在文本區域中顯示的插入符號(或光標)。 指示您在哪里鍵入文本的東西? 好吧,至少已經顯示了,但是它並沒有像應該的那樣閃爍。

我在WM_CREATE中創建了一個EDIT框,如下所示:

    case WM_CREATE:
        {

            if(!logged) {

                    HWND userField = CreateWindow(
                                        "EDIT",  // Predefined class; Unicode assumed 
                                        NULL,      // Button text 
                                        WS_VISIBLE | WS_CHILD | WS_BORDER | ES_LEFT,  // Styles 
                                        C_WIDTH/2 - 80,         // x position 
                                        C_HEIGHT - 240,         // y position 
                                        160,        // Button width
                                        25,        // Button height
                                        hwnd,     // Parent window
                                        NULL,       // No menu.
                                        (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE), 
                                        NULL);      // Pointer not needed.

                    // initialize NONCLIENTMETRICS structure
                    NONCLIENTMETRICS ncm;
                    ncm.cbSize = sizeof(ncm);

                    // obtain non-client metrics
                    SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(ncm), &ncm, 0);

                    // create the new font
                    HFONT hNewFont = CreateFontIndirect(&ncm.lfMessageFont);

                    // set the new font
                    SendMessage(userField, WM_SETFONT, (WPARAM)hNewFont, 0);

            }

        }
        break;

那就是有關編輯框的所有代碼。 如果我不夠清楚或缺少我的代碼,對不起。 我不確定代碼的哪些部分在這里是相關的,哪些是不相關的。 我也不認為我應該將整個代碼粘貼到這里。

同樣,問題是文本框(userField)中的插入符號不閃爍。

如果需要,請詢問更多詳細信息。

使用您的代碼,我沒有出現閃爍的插入符號。 但后來我補充說:

SetFocus( userField );

和voilà,閃爍的插入符號:-)

這可能不是OP遇到的問題,但是我也遇到相同的症狀,如果有人遇到此問題,我將在此處發布解決方案...

簡而言之,如果您將編輯控件作為子類,並處理WM_SETFOCUS事件,則需要調用DefSubclassProc(),否則插入符號將不會顯示。 據推測,您可以自己調用ShowCaret(),但如果需要進行其他處理,則僅調用DefSubclassProc()可能會更安全。

在玩了之后-使我的代碼有點整潔-我不小心自己解決了這個問題

我變了

HWND userField = CreateWindow(
                             "EDIT",  // Predefined class; Unicode assumed 
                             NULL,      // Button text 
                             WS_VISIBLE | WS_CHILD | WS_BORDER | ES_LEFT,  // Styles 
                             C_WIDTH/2 - 80,         // x position 
                             C_HEIGHT - 240,         // y position 
                             160,        // Button width
                             25,        // Button height
                             hwnd,     // Parent window
                             NULL,       // No menu.
                             (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE), 
                             NULL);      // Pointer not needed.

HWND userField = CreateWindow("EDIT", NULL, WS_VISIBLE | WS_CHILD | WS_BORDER | ES_LEFT,
                     C_WIDTH/2 - 80, C_HEIGHT - 240, 160, 25, hwnd, NULL, g_hInstance, NULL);

唯一的區別是hInstance:在第一個代碼中,這顯然是錯誤的。 我將其更改為hInstance的全局引用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM