什么是控件呢?简单的说,控件的其实就是一个个窗口(如果不是窗口,怎么能或得鼠标点击或者空格键的消息呢)。所以理论上,我们也可以不使用windows自带的控件,而自己动手写一个当做控件用的窗口。那么我们大概需要做一下几件事情:
1.创建并注册这个窗口。
2.通过前面的雷区翻盖程序,我们可以想到:控件每次点击不同的相应,应该是就是贴图的效果,所以对于每次点击窗口,需要贴图。
3.建立一个数据结构,记录控件是否被选中。
而windos系统,自动帮我们完成了后两件事情,当我们使用控件时,只需要注册窗口就行了。
让我们先看一段程序:
#include <windows.h>
struct
{
int iStyle ;
TCHAR * szText ;
}
button[] =
{
BS_PUSHBUTTON, TEXT ("下压按钮"),
BS_DEFPUSHBUTTON, TEXT ("默认下压按钮"),
//该复选框需要程序员给它发出消息才能被选中
BS_CHECKBOX, TEXT ("复选框"),
//自动复选框
BS_AUTOCHECKBOX, TEXT ("自动复选框"),
BS_RADIOBUTTON, TEXT ("单选按钮"),
BS_3STATE, TEXT ("3状态复选框"),
BS_AUTO3STATE, TEXT ("自动3状态复选框"),
//既不处理鼠标键盘输入,也不向父窗口发送WM_COMMAND消息,用来包含其他控制按钮
BS_GROUPBOX, TEXT ("分组框"),
BS_AUTORADIOBUTTON, TEXT ("自动单选按钮"),
//自绘按钮
BS_OWNERDRAW, TEXT ("OWNERDRAW")
} ;
//总控件数
#define NUM (sizeof button / sizeof button[0])
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("BtnLook") ;
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra =