2013-05-13 97 views
0

我的目標是用一堆不同的子控件填充窗口的客戶區。像按鈕複選框和靜態文本的東西,但我很難找出如何捕捉按鈕單擊消息。如何檢查按鈕是否被按下

我的代碼:

#include <windows.h> 
#include <CommCtrl.h> 
#include "resource.h" 

HMENU  BUTTON1; 

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, UINT wParam, LONG lParam) ; 

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, 
        LPSTR lpszCmdParam, int nCmdShow) 
    { 
    static char szAppName[] = "Keyboarding" ; 
    HWND  hwnd; 
    MSG   msg; 
    WNDCLASS wndclass; 
    HMENU  hMenu; 


    hMenu = LoadMenu(hInstance, MAKEINTRESOURCE(IDR_MENU1)); 

    if (!hPrevInstance) 
      { 
      wndclass.style   = CS_HREDRAW | CS_VREDRAW; 
      wndclass.lpfnWndProc = WndProc; 
      wndclass.cbClsExtra = 0; 
      wndclass.cbWndExtra = 0; 
      wndclass.hInstance  = hInstance ; 
      wndclass.hIcon   = LoadIcon (NULL, IDI_APPLICATION) ; 
      wndclass.hCursor  = LoadCursor (NULL, IDC_ARROW) ; 
      wndclass.hbrBackground = static_cast<HBRUSH>(GetStockObject (WHITE_BRUSH)); 
      wndclass.lpszMenuName = NULL ; 
      wndclass.lpszClassName = szAppName ; 

      RegisterClass (&wndclass) ; 
     } 

    hwnd = CreateWindow (szAppName,   // window class name 
        "Lab 6", // window caption 
        WS_OVERLAPPEDWINDOW,  // window style 
        CW_USEDEFAULT,   // initial x position 
        CW_USEDEFAULT,   // initial y position 
        CW_USEDEFAULT, 
        CW_USEDEFAULT,    // hmmmmm??? 
        NULL,     // parent window handle 
        hMenu,     // window menu handle 
        hInstance,    // program instance handle 
        NULL) ;    // creation parameters 

    HWND button1 = CreateWindow(WC_BUTTON, 
         "Push Button", 
         WS_TABSTOP|WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON, 
         50, 
         50, 
         100, 
         24, 
         hwnd, 
         BUTTON1, 
         hInstance, 
         NULL); 

    HWND button2 = CreateWindow(WC_BUTTON, 
         "Auto Check Button?", 
         WS_TABSTOP|WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON, 
         50, 
         50, 
         100, 
         24, 
         hwnd, 
         NULL, 
         hInstance, 
         NULL); 

    HWND button3 = CreateWindow(WC_BUTTON, 
         "Push Button", 
         WS_TABSTOP|WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON, 
         50, 
         50, 
         100, 
         24, 
         hwnd, 
         NULL, 
         hInstance, 
         NULL); 

    HWND editControl = CreateWindow(WC_BUTTON, 
         "Push Button", 
         WS_TABSTOP|WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON, 
         50, 
         50, 
         100, 
         24, 
         hwnd, 
         NULL, 
         hInstance, 
         NULL); 

    HWND StaticControl = CreateWindow(WC_STATIC, 
         "Hello World", 
         WS_TABSTOP|WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON, 
         50, 
         100, 
         100, 
         24, 
         hwnd, 
         NULL, 
         hInstance, 
         NULL); 

    HWND ListBox = CreateWindow(WC_BUTTON, 
         "Push Button", 
         WS_TABSTOP|WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON, 
         50, 
         50, 
         100, 
         24, 
         hwnd, 
         NULL, 
         hInstance, 
         NULL); 

    ShowWindow (hwnd, nCmdShow) ; 
    UpdateWindow (hwnd) ; 

    while (GetMessage (&msg, NULL, 0, 0)) 
      { 
      TranslateMessage (&msg) ; 
      DispatchMessage (&msg) ; 
      } 
    return (int) msg.wParam ; 
    } 

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, UINT wParam, 
          LONG lParam) 
    { 
    HDC   hdc ; 
    PAINTSTRUCT ps ; 
    TEXTMETRIC tm; 
    RECT  rClientRect; 
    RECT  rWindowRect; 
    SIZE  size; 
    int  cButtons = 0; 

    switch (message) 
      {   

    case WM_COMMAND: 
     switch(LOWORD(wParam)) 
     { 
     case BUTTON1: 
      break; 
     }  

      case WM_PAINT: 
       hdc = BeginPaint (hwnd, &ps) ; 

       EndPaint (hwnd, &ps) ; 
       return 0 ; 

      case WM_DESTROY: 
       PostQuitMessage (0) ; 
       return 0 ; 
      } 

    return DefWindowProc (hwnd, message, wParam, lParam) ; 
    } 

我試圖抓住我的第一個按鈕labaled按鈕1,並具有 「ID」 BUTTON1。我試圖在我的WM_COMMAND中捕捉它們,並且它說我的BUTTON1是未識別的。

+0

我試圖在我的WM_COMMAND中捕捉我的BUTTON1並切換wParam的LOWORD。它只是說BUTTON1沒有被識別。 – 2013-05-13 15:52:27

+0

@JesseMoreland,它在'WinMain'中。你的程序看不到它。 – chris 2013-05-13 15:53:38

+0

我必須制定一個兒童控制程序? – 2013-05-13 15:53:52

回答

3

你所尋找的是:

case WM_COMMAND: 
    switch(LOWORD(wParam)) { 
     case BUTTON1: { 

但在此之前它可以識別BUTTON1你將不得不宣佈它以這樣一種方式,它可以通過消息處理程序予以確認:例如使之成爲全球變量,而不是在WinMain中聲明它:

HMENU  BUTTON1; 

int WINAPI WinMaietcetc.. 

讓我知道這是否工作!

+0

它的工作種類。它說BUTTON1需要是一個可修改的表達。現在更新代碼。 – 2013-05-13 16:01:47

+0

您需要給BUTTON1一個值,所以'HMENU BUTTON1 = 5'。你最好使用define('#define BUTTON1 5')或'const int'而不僅僅是HMENU – 2013-05-13 16:04:18

+0

因爲它是一個開關,我認爲它必須是const或定義的,以便它被允許由編譯器 – 2013-05-13 16:05:18

相關問題