Win 32プログラミング追加コントロールおよび傍受2018-10-16

3321 ワード

Win 32プログラミングシリーズの記事:https://www.jianshu.com/nb/30332818
コントロールの追加
Hello Worldに加えて、以下を追加します.
  • wWinMain内部に変数を作成し、
    //        
    HWND hStatic = CreateWindow(
        TEXT("static"),  //        
        TEXT("hahaha"),  //     
        WS_CHILD /*   */ | WS_VISIBLE /*     */ | WS_BORDER /*   */,
        120 /*X  */, 20/*Y  */, 150/*  */, 80/*  */, hwnd/*     */,
        (HMENU)1,  //            
        hInstance,  //      
        NULL
    );
    
  • の方法を使用します.
  • は、ボタン、入力ボックスなどを作成することができるものと同様であり、以下の通りである:
    //            
    CreateWindow(L"EDIT", 0, WS_BORDER | WS_CHILD | WS_VISIBLE, 56, 10, 50, 18, hwnd, 0, hInstance, 0);
    
    //           
    my_button = CreateWindow(L"BUTTON", L"    ", WS_CHILD | WS_VISIBLE, 70, 70, 80, 25, hwnd, (HMENU)8, hInstance, 0);
    
  • .
  • プルダウンボックスを作成するときは面倒で、次のようにデータをバインドする必要があります.
    TCHAR Planets[9][10] =
    {
        TEXT("Mercury"), TEXT("Venus"), TEXT("Terra"), TEXT("Mars"),
        TEXT("Jupiter"), TEXT("Saturn"), TEXT("Uranus"), TEXT("Neptune"),
        TEXT("Pluto??")
    };
    
    int xpos = 100;            // Horizontal position of the window.
    int ypos = 100;            // Vertical position of the window.
    int nwidth = 200;          // Width of the window
    int nheight = 200;         // Height of the window
    HWND hwndParent = hwnd; // Handle to the parent window
    
    HWND hWndComboBox = CreateWindow(L"COMBOBOX", TEXT(""),
        CBS_DROPDOWN | CBS_HASSTRINGS | WS_CHILD | WS_OVERLAPPED | WS_VISIBLE,
        xpos, ypos, nwidth, nheight, hwndParent, NULL, hInstance,
        NULL);
    
    TCHAR A[16];
    int  k = 0;
    
    memset(&A, 0, sizeof(A));
    for (k = 0; k <= 8; k += 1)
    {
        wcscpy_s(A, sizeof(A) / sizeof(TCHAR), (TCHAR*)Planets[k]);
    
        // Add string to combobox.
        SendMessage(hWndComboBox, (UINT)CB_ADDSTRING, (WPARAM)0, (LPARAM)A);
    }
    
    // Send the CB_SETCURSEL message to display an initial item 
    //  in the selection field  
    SendMessage(hWndComboBox, CB_SETCURSEL, (WPARAM)2, (LPARAM)0);
    
  • イベントのバインド
  • WindowProcに対応するswitch-caseを追加します.以下:
    wchar_t a[6] = TEXT("Dian0");
    int wmId = LOWORD(wParam);
    int wmEvent = HIWORD(wParam);
    switch (uMsg)
    {
    case WM_CLOSE:
        DestroyWindow(hwnd);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    case WM_COMMAND:
        if (wmEvent == BN_CLICKED) {
            a[4] = L'0' + (a[4] - L'0' + 1) % 10;
            SetWindowText(my_button, a);
            break;
        }
        else if (wmEvent == CBN_SELCHANGE)
            // If the user makes a selection from the list:
            //   Send CB_GETCURSEL message to get the index of the selected list item.
            //   Send CB_GETLBTEXT message to get the item.
            //   Display the item in a messagebox.
        {
            int ItemIndex = SendMessage((HWND)lParam, (UINT)CB_GETCURSEL,
                (WPARAM)0, (LPARAM)0);
            TCHAR  ListItem[256];
            (TCHAR)SendMessage((HWND)lParam, (UINT)CB_GETLBTEXT,
                (WPARAM)ItemIndex, (LPARAM)ListItem);
            MessageBox(hwnd, (LPCWSTR)ListItem, TEXT("Item Selected"), MB_OK);
        }
        // Here don't write break on purpose!
    default:
        return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    //        default