如何在win32中复选框?

时间:2014-06-05 16:15:34

标签: c++ winapi checkbox

简单的问题,我无法找到我需要的东西,你如何使用CreateWindow函数只使用代码在win32中创建复选框,没有可视化的c ++,没有其他帮助程序,只有windows.h?我想要简单的例子,以及如何使用它? 我还在学习c ++和win32,所以不了解大部分内容,msdn也没有提供太多信息。

2 个答案:

答案 0 :(得分:5)

在CreateWindowEx()的参数中,类名应为BUTTON,窗口样式应为BS_CHECKBOX。两者都是Windows.h中定义的内置常量

hWnd = CreateWindowEx(NULL,BUTTON,"Checkbox",BS_CHECKBOX,xPos,yPos,width,height,parent,NULL,NULL,NULL)

您可以像处理来自任何其他窗口的消息一样处理它的消息。

答案 1 :(得分:3)

根据此链接(http://www.cplusplus.com/forum/windows/40147/

代码应为

#include <windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

static char *title = TEXT("Check Box");

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
                LPSTR lpCmdLine, int nCmdShow )
{
 MSG  msg ;    
WNDCLASS wc = {0};
wc.lpszClassName = TEXT( "Check Box" );
wc.hInstance     = hInstance ;
wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
wc.lpfnWndProc   = WndProc ;
wc.hCursor       = LoadCursor(0, IDC_ARROW);


RegisterClass(&wc);
 CreateWindow( wc.lpszClassName, title,
            WS_OVERLAPPEDWINDOW | WS_VISIBLE,
            150, 150, 230, 150, 0, 0, hInstance, 0);  

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

 LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{

 switch(msg)  
 {
  case WM_CREATE:
  {
    CreateWindow(TEXT("button"), TEXT("Show Title"),
                 WS_VISIBLE | WS_CHILD | BS_CHECKBOX,
                 20, 20, 185, 35,        
                 hwnd, (HMENU) 1, ((LPCREATESTRUCT)lParam)->hInstance, NULL);
    CheckDlgButton(hwnd, 1, BST_CHECKED);
    break;
  }

  case WM_COMMAND:
  {
       BOOL checked = IsDlgButtonChecked(hwnd, 1);
    if (checked) {
        CheckDlgButton(hwnd, 1, BST_UNCHECKED);
     SetWindowText(hwnd, TEXT(""));
    } else {
     CheckDlgButton(hwnd, 1, BST_CHECKED);
     SetWindowText(hwnd, title);
    }
    break;
   }

  case WM_DESTROY:
  {
       PostQuitMessage(0);
       break;
  }
 }
return DefWindowProc(hwnd, msg, wParam, lParam);
 }

在论坛中,他们声明此代码用于创建多个复选框,但稍加修改就可以解决这个问题。

- 快乐编程!