[win32]我用CreateWindow创建了一格空白窗口,又使用createWindow再窗口上创建了一个按钮,但是我怎么知道这个按钮被按下?接收哪个消息?

解决方案 »

  1.   

    #include <windows.h> 
     
    // Global variable 
     
    HINSTANCE hinst; 
     
    // Function prototypes. 
     
    int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int); 
    InitApplication(HINSTANCE); 
    InitInstance(HINSTANCE, int); 
    LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM); 
     
    // Application entry point. 
     
    int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, 
        LPSTR lpCmdLine, int nCmdShow) 

        MSG msg; 
     
        if (!InitApplication(hinstance)) 
            return FALSE; 
     
        if (!InitInstance(hinstance, nCmdShow)) 
            return FALSE; 
     
        while (GetMessage(&msg, (HWND) NULL, 0, 0) != 0 && GetMessage(&msg, (HWND) NULL, 0, 0) != -1) 
        { 
            TranslateMessage(&msg); 
            DispatchMessage(&msg); 
        } 
        return msg.wParam; 
            UNREFERENCED_PARAMETER(lpCmdLine); 

     
    BOOL InitApplication(HINSTANCE hinstance) 

        WNDCLASSEX wcx; 
     
        // Fill in the window class structure with parameters 
        // that describe the main window. 
     
        wcx.cbSize = sizeof(wcx);          // size of structure 
        wcx.style = CS_HREDRAW | 
            CS_VREDRAW;                    // redraw if size changes 
        wcx.lpfnWndProc = MainWndProc;     // points to window procedure 
        wcx.cbClsExtra = 0;                // no extra class memory 
        wcx.cbWndExtra = 0;                // no extra window memory 
        wcx.hInstance = hinstance;         // handle to instance 
        wcx.hIcon = LoadIcon(NULL, 
            IDI_APPLICATION);              // predefined app. icon 
        wcx.hCursor = LoadCursor(NULL, 
            IDC_ARROW);                    // predefined arrow 
        wcx.hbrBackground = GetStockObject( 
            WHITE_BRUSH);                  // white background brush 
        wcx.lpszMenuName =  "MainMenu";    // name of menu resource 
        wcx.lpszClassName = "MainWClass";  // name of window class 
        wcx.hIconSm = LoadImage(hinstance, // small class icon 
            MAKEINTRESOURCE(5),
            IMAGE_ICON, 
            GetSystemMetrics(SM_CXSMICON), 
            GetSystemMetrics(SM_CYSMICON), 
            LR_DEFAULTCOLOR); 
     
        // Register the window class. 
     
        return RegisterClassEx(&wcx); 

     
    BOOL InitInstance(HINSTANCE hinstance, int nCmdShow) 

        HWND hwnd; 
     
        // Save the application-instance handle. 
     
        hinst = hinstance; 
     
        // Create the main window. 
     
        hwnd = CreateWindow( 
            "MainWClass",        // name of window class 
            "Sample",            // title-bar string 
            WS_OVERLAPPEDWINDOW, // top-level window 
            CW_USEDEFAULT,       // default horizontal position 
            CW_USEDEFAULT,       // default vertical position 
            CW_USEDEFAULT,       // default width 
            CW_USEDEFAULT,       // default height 
            (HWND) NULL,         // no owner window 
            (HMENU) NULL,        // use class menu 
            hinstance,           // handle to application instance 
            (LPVOID) NULL);      // no window-creation data 
     
        if (!hwnd) 
            return FALSE; 
     
        // Show the window and send a WM_PAINT message to the window 
        // procedure. 
     
        ShowWindow(hwnd, nCmdShow); 
        UpdateWindow(hwnd); 
        return TRUE; 
     

      

  2.   

    看看 MainWndProc 的使用
      

  3.   

    MainWndProc部分根本就不在你的代码里面。
      

  4.   

    (c写的)如果是动态创建的,你应该知道创建的区域,然后在处理WM_LBUTTONDOWN消息时判断鼠标是否在这个区域。当然应该有一个变量来标记button的状态
      

  5.   

    BN_CLICKED Notification--------------------------------------------------------------------------------The BN_CLICKED notification code is sent when the user clicks a button. The parent window of the button receives the BN_CLICKED notification code through the WM_COMMAND message. 
      

  6.   

    回复人: jp1981113(傲笑剑客) ( ) 信誉:100  2005-12-16 10:35:00  得分: 0  
      
     回复人: Mackz(在相互) ( ) 信誉:117  2005-12-16 10:46:00  得分: 0  
     
    你们的意思是不是我动态创建的只能人工去判断鼠标点击的位置是不是?这样好像是很繁琐亚。另外,如果是使用键盘触发按钮时这样好像是也不可行呀。