绘制一个普通的蓝色背景的窗口,中间有一个红色的方块

3 篇文章 0 订阅
0 篇文章 0 订阅

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);
}

定义窗口类型——>注册窗口——>创建窗口——>启动消息循环——>编写响应的回调函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值