CreateSolidBrush
/*
* 画刷笔设置 CreateSolidBrush()
*/
#include <windows.h>
#include <string>
using namespace std;
#define size 50
// 窗口函数的函数原形
LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
char szClassName[] = "MainWClass";
WNDCLASSEX wndclass;
// 用描述主窗口的参数填充WNDCLASSEX结构
wndclass.cbSize = sizeof(wndclass); // 结构的大小
wndclass.style = CS_HREDRAW|CS_VREDRAW; // 指定如果大小改变就重画
wndclass.lpfnWndProc = MainWndProc; // 窗口函数指针,当窗口收到消息时,windows调用此函数
wndclass.cbClsExtra = 0; // 没有额外的类内存
wndclass.cbWndExtra = 0; // 没有额外的窗口内存
wndclass.hInstance = hInstance; // 实例句柄
wndclass.hIcon = LoadIcon(
NULL,
IDI_APPLICATION); // 使用预定义图标
wndclass.hCursor = LoadCursor(
NULL,
IDC_ARROW); // 使用预定义的光标
//设置背景画刷
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // 使用白色背景画刷
wndclass.lpszMenuName = NULL; // 不指定菜单
wndclass.lpszClassName = szClassName ; // 窗口类的名称
wndclass.hIconSm = NULL; // 没有类的小图标
// 注册这个窗口类
RegisterClassEx(&wndclass);
// 创建主窗口
HWND hwnd = ::CreateWindowEx(
0, // dwExStyle,扩展样式
szClassName, // lpClassName,类名
"My first Window!", // lpWindowName,标题
WS_OVERLAPPEDWINDOW, // dwStyle,窗口风格
CW_USEDEFAULT, // X,初始 X 坐标
CW_USEDEFAULT, // Y,初始 Y 坐标
CW_USEDEFAULT, // nWidth,宽度
CW_USEDEFAULT, // nHeight,高度
NULL, // hWndParent,父窗口句柄
NULL, // hMenu,菜单句柄
hInstance, // hlnstance,程序实例句柄
NULL) ; // lpParam,用户数据
if(hwnd == NULL)
{
MessageBox(NULL, "创建窗口出错!", "error", MB_OK);
return -1;
}
// 显示窗口,刷新窗口客户区
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
// 从消息堆中取出消息
MSG msg;
//循环结束条件, GetMessage 从消息队列中获取到 WM_QUIT 消息,返回 0 。
//所以结束程序,需要向消息队列中发送 WM_QUIT 消息。
while(GetMessage(&msg, NULL, 0, 0))
{
// 转化键盘消息
TranslateMessage(&msg);
// 将消息发送到相应的窗口函数
DispatchMessage(&msg);
}
// 当GetMessage返回0时程序结束
return msg.wParam;
}
LRESULT CALLBACK MainWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_PAINT: // 窗口客户区需要重画
{
HDC hdc;
PAINTSTRUCT ps;
// 使无效的客户区变的有效,并取得设备环境句柄
hdc = ::BeginPaint (hwnd, &ps) ;
//创建填充用画刷,用后删除 deleteObject()
HBRUSH hbrush=CreateSolidBrush(RGB(100,120,200));
//将新画刷 hbrush 选入设备,返回以前的老画刷holdbrush,系统默认值
HBRUSH holdbrush=(HBRUSH)SelectObject(hdc,hbrush);
//画矩形,用hbrush填充
Rectangle(
hdc,
50,50,
100,100);
//将老画刷 holdbrush 选入设备
SelectObject(hdc,holdbrush);
//删除创建的画刷句柄
DeleteObject(hbrush);
//画矩形,用holdbrush填充
Rectangle(
hdc,
200,50,
250,100);
EndPaint(hwnd, &ps);
return 0;
}
//当关闭窗口时,windows 向消息队列发送 WM_DESTROY 消息。
case WM_DESTROY: // 正在销毁窗口
// 向消息队列投递一个WM_QUIT消息,促使GetMessage函数返回0,结束消息循环
PostQuitMessage(0) ;
return 0 ;
}
// 将我们不处理的消息交给系统做默认处理
return DefWindowProc(hwnd, message, wParam, lParam);
}