不好意思 我是问SDK的实现,不是问MFC下的实现。然后就是手动复选框和自动复选框有什么区别?//SOURCE代码 IDD_DIALOG DIALOG DISCARDABLE 0, 0, 187, 98 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Dialog" FONT 10, "System" BEGIN DEFPUSHBUTTON "OK",IDOK,130,28,50,14 PUSHBUTTON "Cancel",IDCANCEL,130,65,50,14 CHECKBOX "CheckBox1",ID_CB1,22,16,53,10 CONTROL "CheckBox2",ID_CB2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, 20,47,53,10 END//代码 #include <windows.h> #include <string.h> #include <stdio.h> #include "Resource.h"LRESULT CALLBACK WindowFunc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK DialogFunc(HWND, UINT, WPARAM, LPARAM);char szWinName[ ] = "MyWin"; /* name of window class */ HINSTANCE hInst;/* holds status of check boxes */ int cbstatusl=BST_UNCHECKED, cbstatus2=BST_UNCHECKED;int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst, LPSTR lpszArgs, int nWinMode) { HWND hwnd; MSG msg; WNDCLASSEX wcl; HACCEL hAccel;
/* Define a window class. */ wcl.cbSize = sizeof(WNDCLASSEX); wcl.hInstance = hThisInst; /* handle to this instance */ wcl.lpszClassName = szWinName; /* window class name */ wcl.lpfnWndProc = WindowFunc; /* window function */ wcl.style = 0; /* default style */ wcl.hIcon = LoadIcon(NULL, IDI_APPLICATION); /* standard icon */ wcl.hIconSm = LoadIcon(NULL, IDI_WINLOGO); /* small icon */ wcl.hCursor = LoadCursor(NULL, IDC_ARROW); /* cursor style */ wcl.lpszMenuName = MAKEINTRESOURCE(IDR_MENU); /* main menu */ wcl.cbClsExtra = 0; /* no extra */ wcl.cbWndExtra = 0; /* information needed */ /* Make the window white. */ wcl.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
/* Register the window class. */ if(!RegisterClassEx(&wcl)) return 0; /* Now that a window class has been registered, a window can be created. */ hwnd = CreateWindow( szWinName, /* name of window class */ "Using Check Boxes", /* title */ WS_OVERLAPPEDWINDOW, /* window style - normal */ CW_USEDEFAULT, /* X coordinate - let Windows decide */ CW_USEDEFAULT, /* Y coordinate - let Windows decide */ CW_USEDEFAULT, /* width - let Windows decide */ CW_USEDEFAULT, /* height - let Windows decide */ HWND_DESKTOP, /* no parent window */ NULL, /* no override of class menu */ hThisInst, /* handle of this instance of the program */ NULL /* no additional arguments */ ); hInst = hThisInst; /* save the current instance handle */
/* Display the window. */ ShowWindow(hwnd, nWinMode); UpdateWindow(hwnd); /* Create the message loop. */ while(GetMessage(&msg, NULL, 0, 0)) { if(!TranslateAccelerator(hwnd, hAccel, &msg)) { TranslateMessage(&msg); /* translate keyboard messages */ DispatchMessage(&msg); /* return control to Windows 98 */ } } return msg.wParam; }/* This function is called by Windows 98 and is passed messages from the message queue. */ LRESULT CALLBACK WindowFunc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { char str[255]; int response; switch(message) { case WM_COMMAND: switch(LOWORD(wParam)) { case IDM_DIALOG: DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG), hwnd, (DLGPROC) DialogFunc); break; case IDM_EXIT: response = MessageBox(hwnd, "Quit the Program?", "Exit", MB_YESNO); if(response == IDYES) PostQuitMessage(0); break; case IDM_STATUS: /* show check box status */ if(cbstatusl == BST_CHECKED) strcpy(str, "Checkbox 1 is checked\n"); else strcpy(str, "Checkbox 1 is not checked\n"); if(cbstatus2 == BST_CHECKED) strcat(str, "Checkbox 2 is checked"); else strcat(str, "Checkbox 2 is not checked"); MessageBox(hwnd, str, "Status", MB_OK); break; case IDM_HELP: MessageBox(hwnd, "Not Implemented", "Help", MB_OK); break; } break; case WM_DESTROY: /* terminate the program */ PostQuitMessage(0); break; default: /* Let Windows 98 process any messages not specified in the preceding switch statement. */ return DefWindowProc(hwnd, message, wParam, lParam); } return 0; }
/* A simple dialog function. */ LRESULT CALLBACK DialogFunc(HWND hdwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_COMMAND: switch(LOWORD(wParam)) { case IDCANCEL: EndDialog(hdwnd, 0); return 0; case IDOK:
/* update global checkbox status variables */ cbstatusl = SendDlgItemMessage(hdwnd, ID_CB1, BM_GETCHECK, 0, 0); cbstatus2 = SendDlgItemMessage(hdwnd, ID_CB2, BM_GETCHECK, 0, 0); EndDialog(hdwnd, 0); return 1; case ID_CB1: /* user selected 1st check box, so check it */ SendDlgItemMessage(hdwnd, ID_CB1, BM_SETCHECK, BST_CHECKED, 0); return 1; } } return 0; }
{
m_wndCheckBox.SetCheck(m_wndCheckBox.GetCheck() == BST_CHECKED ?
BST_UNCHECKED : BST_CHECKED);
}//m_wndCheckBox是和checkbox关联的控件变量。
IDD_DIALOG DIALOG DISCARDABLE 0, 0, 187, 98
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
FONT 10, "System"
BEGIN
DEFPUSHBUTTON "OK",IDOK,130,28,50,14
PUSHBUTTON "Cancel",IDCANCEL,130,65,50,14
CHECKBOX "CheckBox1",ID_CB1,22,16,53,10
CONTROL "CheckBox2",ID_CB2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,
20,47,53,10
END//代码
#include <windows.h>
#include <string.h>
#include <stdio.h>
#include "Resource.h"LRESULT CALLBACK WindowFunc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK DialogFunc(HWND, UINT, WPARAM, LPARAM);char szWinName[ ] = "MyWin"; /* name of window class */
HINSTANCE hInst;/* holds status of check boxes */
int cbstatusl=BST_UNCHECKED, cbstatus2=BST_UNCHECKED;int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst,
LPSTR lpszArgs, int nWinMode)
{
HWND hwnd;
MSG msg;
WNDCLASSEX wcl;
HACCEL hAccel;
/* Define a window class. */
wcl.cbSize = sizeof(WNDCLASSEX);
wcl.hInstance = hThisInst; /* handle to this instance */
wcl.lpszClassName = szWinName; /* window class name */
wcl.lpfnWndProc = WindowFunc; /* window function */
wcl.style = 0; /* default style */
wcl.hIcon = LoadIcon(NULL, IDI_APPLICATION); /* standard icon */
wcl.hIconSm = LoadIcon(NULL, IDI_WINLOGO); /* small icon */
wcl.hCursor = LoadCursor(NULL, IDC_ARROW); /* cursor style */
wcl.lpszMenuName = MAKEINTRESOURCE(IDR_MENU); /* main menu */
wcl.cbClsExtra = 0; /* no extra */
wcl.cbWndExtra = 0; /* information needed */ /* Make the window white. */
wcl.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
/* Register the window class. */
if(!RegisterClassEx(&wcl)) return 0; /* Now that a window class has been registered, a window
can be created. */
hwnd = CreateWindow(
szWinName, /* name of window class */
"Using Check Boxes", /* title */
WS_OVERLAPPEDWINDOW, /* window style - normal */
CW_USEDEFAULT, /* X coordinate - let Windows decide */
CW_USEDEFAULT, /* Y coordinate - let Windows decide */
CW_USEDEFAULT, /* width - let Windows decide */
CW_USEDEFAULT, /* height - let Windows decide */
HWND_DESKTOP, /* no parent window */
NULL, /* no override of class menu */
hThisInst, /* handle of this instance of the program */
NULL /* no additional arguments */
);
hInst = hThisInst; /* save the current instance handle */
/* Load accelerators. */
hAccel = LoadAccelerators(hThisInst, MAKEINTRESOURCE(IDR_ACCELERATOR));
/* Display the window. */
ShowWindow(hwnd, nWinMode);
UpdateWindow(hwnd); /* Create the message loop. */
while(GetMessage(&msg, NULL, 0, 0))
{
if(!TranslateAccelerator(hwnd, hAccel, &msg))
{
TranslateMessage(&msg); /* translate keyboard messages */
DispatchMessage(&msg); /* return control to Windows 98 */
}
}
return msg.wParam;
}/* This function is called by Windows 98 and is passed
messages from the message queue.
*/
LRESULT CALLBACK WindowFunc(HWND hwnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
char str[255];
int response;
switch(message)
{
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDM_DIALOG:
DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG), hwnd, (DLGPROC) DialogFunc);
break;
case IDM_EXIT:
response = MessageBox(hwnd, "Quit the Program?",
"Exit", MB_YESNO);
if(response == IDYES) PostQuitMessage(0);
break;
case IDM_STATUS: /* show check box status */
if(cbstatusl == BST_CHECKED)
strcpy(str, "Checkbox 1 is checked\n");
else strcpy(str, "Checkbox 1 is not checked\n");
if(cbstatus2 == BST_CHECKED)
strcat(str, "Checkbox 2 is checked");
else strcat(str, "Checkbox 2 is not checked");
MessageBox(hwnd, str, "Status", MB_OK);
break;
case IDM_HELP:
MessageBox(hwnd, "Not Implemented", "Help", MB_OK);
break;
}
break;
case WM_DESTROY: /* terminate the program */
PostQuitMessage(0);
break;
default:
/* Let Windows 98 process any messages not specified in
the preceding switch statement. */
return DefWindowProc(hwnd, message, wParam, lParam);
}
return 0;
}
/* A simple dialog function. */
LRESULT CALLBACK DialogFunc(HWND hdwnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDCANCEL:
EndDialog(hdwnd, 0);
return 0;
case IDOK:
/* update global checkbox status variables */
cbstatusl = SendDlgItemMessage(hdwnd, ID_CB1,
BM_GETCHECK, 0, 0);
cbstatus2 = SendDlgItemMessage(hdwnd, ID_CB2,
BM_GETCHECK, 0, 0);
EndDialog(hdwnd, 0);
return 1;
case ID_CB1:
/* user selected 1st check box, so check it */
SendDlgItemMessage(hdwnd, ID_CB1,
BM_SETCHECK, BST_CHECKED, 0);
return 1;
}
}
return 0;
}