windows

Windows窗口和消息(一)
Windows应用程序基本结构,包括:
窗口处理    包括设计窗口类、注册窗口类、创建窗口、显示及更新窗口
消息循环    包括消息结构体,消息循环,消息的结束,消息的解释、分发
窗口过程函数
常用句柄、常用消息介绍
Windows应用程序运行原理
建立自己的窗口
MessageBox创建的窗口,功能局限
可以有几个按钮、图标、标题、消息正文;按钮和图标必须是Windows提供的。
CreateWindow创建窗口函数
创建一个窗口,其中指定了窗口类、窗口名、窗口样式、窗口初始大小和显示位置、窗口菜单等等内容。
在创建窗口之前,要先有一个窗口类对象。

 CreateWindow原型
HWND CreateWindow(
     LPCTSTR lpClassName,
     LPCTSTR lpWindowName,
        DWORD dwStyle,
        int x,  int y,
        int nWidth,  int nHeight,
        HWND hWndParent,
        HMENU hMenu,
        HINSTANCE hInstance,
        LPVOID lpParam );
窗口类原型
typedef struct {
   UINT              style;                      //窗口类型
   WNDPROC     lpfnWndProc;       //窗口过程函数
   int                      cbClsExtra;          //
   int               cbWndExtra;       //
   HINSTANCE   hInstance;            //窗口的实例
   HICON             hIcon;                   //窗口的图标
   HCURSOR      hCursor;               //窗口的光标
   HBRUSH         hbrBackground;   //窗口背景
   LPCTSTR       lpszMenuName;    //窗口菜单名
   LPCTSTR       lpszClassName;     //窗口类名
} WNDCLASS;
窗口类-常用style
风格         含义
CS_HREDRAW 如果窗口宽度发生改变,重绘整个窗口
CS_VREDRAW 如果窗口高度发生改变,重绘整个窗口
CS_DBLCLKS 能感受用户在窗口中的双击消息
CS_NOCLOSE 禁用系统菜单中的“关闭”命令

如:WNDCLASS wnd;
        wnd.style=CS_HREDRAW|CS_VREDRAW;

窗口类-窗口过程函数
第二个成员变量lpfnWndProc指定了窗口的过程函数,它将处理根据这个窗口类别建立的所有窗口的全部消息。
调用过程由操作系统而不是应用程序自己来实施,但回调函数本身的代码必须由应用程序自己完成。对于一条消息,操作系统到底调用应用程序中的哪个函数来处理呢?操作系统调用的就是窗口类中的lpfnWndProc成员指定的函数
wnd.lpfnWndProc=WndProc;
窗口类-其他成员
hInstance 代表应用程序实例,用WinMain的参数赋值:wnd.hInstance=hInstance;
wnd.hIcon=LoadIcon(hInstance, lpIconName);   
wnd.hCursor=LoadCursor(hInstance, lpCursorName);
    加载应用程序图标、光标,可以预定义/自定义
 预定义:第一个参数为NULL;第二个参数是以IDI(图标)、IDC(光标)开始的标识符,他们在WINUSER.H中定义。
 自定义:第一个参数为程序的执行实例句柄hInstance;第二个参数是自定义图标、光标的文件名,他们以资源的形式存放在项目中。
窗口类-其他成员
wnd.hbrBackground=(HBRUSH)GetStockObject(nBrush);
 设置窗口背景颜色,通过指定一个画刷来实现。GetStockObject能够得到一个预定义的画笔、画刷、字体等对象。
lpszMenuName=NULL;
 设定窗口的菜单,NULL表示没有菜单
lpszClassName=窗口类名(字符串)
 必须给出字符串形式的窗口类名,在创建窗口时要使用。

注册窗口类
Bool RegisterClass(&wnd)
窗口类必须要先注册后使用
函数返回布尔值,成功返回真,否则为假
一般主程序中都会检测这个值,如果为假则给出提示,退出程序。如:
 if (!RegisterClass (&wnd))
 {
  MessageBox(NULL, TEXT(“RegisterClass fail!"),   TEXT(“ERROR”), MB_ICONERROR);
  return 0;       
    }
创建窗口
HWND CreateWindow(
    lpszClassName,        //窗口类名
    lpszTitle,                   //窗口标题名
    WS_OVERLAPPEDWINDOW,      //窗口样式
    10,     //窗口位置X坐标
    10,     //窗口位置Y坐标
    800,     //窗口宽度
       600,     //窗口高度
       NULL,   //该窗口父窗口句柄
    NULL,  //窗口主菜单句柄
    hInstance, //创建此窗口的实例句柄
    NULL); //传给WM_CREATE消息的参数
第一个参数就是程序注册的窗口类的类名。这样,我们建立的窗口才和窗口类联系起来。
CreateWindow函数失败返回NULL;执行成功返回窗口句柄,这个值将提供给很多Windows函数做参数。如:
 HWND hwnd=CreateWindow(wnd,  TEXT(“my window”,  …);
显示及更新窗口
在CreateWindow调用之后,Windows已经建立了这个窗口。即,Windows已经配置了一块内存,用来保存在CreateWindow调用中指定窗口的全部信息和窗口其它信息,而Windows以后就是依据窗口句柄找到这些信息的。
两个函数负责把窗口显示出来:
 ShowWindow(hwnd, nCmdShow);
     hwnd就是刚刚创建成功的窗口的句柄;nCmdShow为WinMain传递来的参数,表示窗口的显示方式;
 UptateWindow(hwnd);
 发送WM_PAINT消息给窗口消息处理程序,导致重绘窗口的显示区域

常用句柄
HWND 窗口句柄   
HINSTANCE 实例句柄
HICON 图标句柄  
HCURSOR 光标句柄 
HBRUSH 画刷句柄
 
一些标识符
这些标识符是在Windows头文件中定义的。有些标识符含有两个字母或者三个字母的前缀,后面接着一个下划线:
 CS_HREDRAW  CS_VREDRAW   窗口类style CS_DBLCLKS    CS_NOCLOSE
 WS_OVERLAPPEDWINDOW        窗口style
 IDC_ARROW    IDC_WAIT      光标样式 
 IDI_APPLICATION                           图标样式
 WM_CREATE   WM_PAINT           消息

前缀 含义 前缀 含义
CS 窗口类别样式 MB 消息框
CW 建立窗口 SND 声音
DT 绘制文字 WM 窗口消息
IDI 图示ID WS 窗口样式
IDC 游标ID  

窗口的创建
创建窗口需要经过下面四个操作步骤:
设计窗口类
注册窗口类     RegisterClass()
创建窗口         CreateWindow()
显示及更新窗口  
      ShowWindow()   UptateWindow()
Windows应用程序基本结构
入口函数WinMain()
{
      初始化;
      创建窗口;
      进入消息循环;
}
窗口过程函数WinProc()
{
      调用各消息响应函数响应消息;
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值