按钮属于window中的一个系统窗口类,窗口类名为button。所以我们可以直接通过CreateWindow创建一个按钮。可以在Window的WM_CREATE事件中创建一个按钮作为窗口的子窗体。

void CreateBtn(HWND parent) {
	btnHwnd = CreateWindow(L"button",
		L"按钮控件",
		WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_BITMAP,
		0, 0,
		200, 200,
		parent,
		(HMENU)111,
		thisInstance,
		NULL
	);
	HANDLE hBmp = LoadImage(NULL, L"d:\\a.bmp", IMAGE_BITMAP, 200, 200, LR_LOADFROMFILE);
	SendMessage(btnHwnd, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)hBmp);//设置按钮的背景图像
}

按钮的点击事件,通过WM_COMMAND消息发送。

case WM_COMMAND:
{
	switch (LOWORD(wParam))
	{
	case 111: {
		if (HIWORD(wParam) == BN_CLICKED) {
			WriteFile("BN_CLICKED");
		}
		if (HIWORD(wParam) == BN_DOUBLECLICKED)
		{
			WriteFile("BN_DOUBLECLICKED");
		}
		break;
	}
	default:
		break;
	}
}

注意这里的111和我们创建button按钮时候的倒数第三个参数保持一致,才能正确监听到点击事件。

按钮美化:加背景图像,可以通过发送SendMessage消息设置按钮的背景图像。

HANDLE hBmp = LoadImage(NULL, L"d:\\a.bmp", IMAGE_BITMAP, 200, 200, LR_LOADFROMFILE);
SendMessage(btnHwnd, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)hBmp);//设置按钮的背景图像

创建文本控件

void CreateStatic(HWND parent) {
	staticHwnd = CreateWindow(L"static",
		L"我是文本",
		WS_CHILD | WS_VISIBLE | SS_SIMPLE,
		200, 400,
		200, 200,
		parent,
		(HMENU)222,
		thisInstance,
		NULL);
	SetWindowText(staticHwnd, L"我是曹瑞鹏");//设置控件文本
	HANDLE hBmp = LoadImage(NULL, L"d:\\a.bmp", IMAGE_BITMAP, 200, 200, LR_LOADFROMFILE);
	SendMessage( staticHwnd, STM_SETIMAGE,(WPARAM)IMAGE_BITMAP, (LPARAM)hBmp);//设置按钮的背景图像

}

可以通过SendMessage设置控件背景图片,不过需要设置样式为SS_BITMAP,而不是SS_SIMPLE