Windows32Application的GDI程序:命名为Rectangle。
1、创建一个Win32Application的空工程
2、添加一个C++文件
3、向其中添加如下代码:
#include<windows.h>
static LPCTSTR lpszAppName="GDI App"; //窗口标题
HBRUSH hBlueBrush,hRedBrush; //创建两个画刷句柄
LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);
//声明响应消息的回调函数
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstane,LPSTR lpCmdLine,int nCmdShow)
{ //Win32程序入口位置
MSG msg; //消息结构
WNDCLASS wc; //窗口类型结构
HWND hWnd; //窗口句柄
hBlueBrush=CreateSolidBrush(RGB(0,0,255)); //创建蓝色画刷实体
hRedBrush=CreateSolidBrush(RGB(255,0,0)); //创建红色画刷实体
//wc定义窗口的类型
wc.style=CS_HREDRAW|CS_VREDRAW;
wc.lpfnWndProc=(WNDPROC)WndProc;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hInstance=hInstance;
wc.hIcon=NULL;
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
//使用蓝色画刷填充窗口背景
wc.hbrBackground=hBlueBrush;
wc.lpszMenuName=NULL;
wc.lpszClassName=lpszAppName;
//注册窗口类型
if(RegisterClass(&wc)==0)
return FALSE;
//hWnd创建窗口
hWnd=CreateWindow(lpszAppName,
lpszAppName,
WS_OVERLAPPEDWINDOW,
100,100,
250,250,
NULL,
NULL,
hInstance,
NULL);
//如果窗口创建失败返回非
if(hWnd==NULL)
return FALSE;
//显示窗口
ShowWindow(hWnd,SW_SHOW);
UpdateWindow(hWnd);
//mag启动消息循环直至窗口被关闭
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg); //分发消息至相应的窗口的消息处理回调函数响应
}
//程序结束时释放之前创建的GDI资源
DeleteObject(hBlueBrush);
DeleteObject(hRedBrush);
return msg.wParam;
}
//消息回调函数
LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_DESTROY: //若销毁窗口
PostQuitMessage(0);
break;
case WM_PAINT: //若绘制窗口
{
PAINTSTRUCT ps;
HBRUSH hOldBrush;
BeginPaint(hWnd,&ps);
hOldBrush = (HBRUSH)SelectObject(ps.hdc, hRedBrush);
Rectangle(ps.hdc,100,100,150,150); //用红色画刷画出一个红色的方块
SelectObject(ps.hdc,hOldBrush);
EndPaint(hWnd,&ps);
}
break;
default:
//将未处理的消息交予Windows默认的处理函数进行处理。
return(DefWindowProc(hWnd,message,wParam,lParam));
}
return(0);
}
定义窗口类型——>注册窗口——>创建窗口——>启动消息循环——>编写响应的回调函数。