windows应用程序基础个人笔记的网上备份

初始化

窗口类定义——定义窗口的形式和功能

窗口类注册——必须先注册后使用

创建窗口实例——create window

显示窗口——show window,update window

 

一 窗口类的定义:

窗口类的数据结构 WNDCLASS

HICONLoadIcon(HINSTANCE hlnstance,LPCTSTR lpIconName)

返回值是一个窗口的句柄

HCURSORLoadCursor(HINSTANCE hlnstance, LPCTSTR lpCursorName)

在应用程序中加载一个窗口光标

hlnstance光标资源所在的模块句柄,NULL则使用系统预定义的光标

 

GetStockObject函数返回一个刷子的数据类型,函数获取系统提供的北京刷

HBRUSH GetStockObject(intnBrush);

 

 

二 注册窗口类

由函数RegisterClass()实现

RegisterClass(&wndclass);

返回值为bool,true则是注册成功

 

 

三创建窗口实例//一个参数表超级长的函数

HWNDCreateWindow

(

LPCTSTRlpszClassName, //窗口类名

LPCTSTRlpszTitle, //窗口标题名

DWORDdwStyle, //创建窗口的样式

int x,y,     //窗口左上角的坐标

intnWidth, nHeight//窗口的宽度和高度

HWND hwndParent//窗口的父窗口句柄

HMENU hMenu//窗口主菜单句柄

LPVOIDlpParam /指向传递给窗口的参数值的指针

)

 

常用窗口样式,见课件

 

 

四 显示窗口

窗口类的显示由ShowWindow和UpdateWindow函数实现

窗口显示形式标识ShowWindow(hwnd, nCmdshow);?

调用ShowWindow函数在屏幕上显示窗口

SW_HIDE

SW_SHOWNORMAL

SW_SHOWMINIMIZE

SW_SHOWMAXMIZE

SW_SHOWNOACTIVE

SW_RESTORE

 

显示窗口后-应用程序调用UpdateWindwo更新并绘制用户区并发出WM_PAINT 消息

UpdateWindow(hwnd)

 

 

消息循环系统——队列

MSG Msg;

while(GetMessage(&Msg,NULL,0,0))

{

       TranslateMessage(&Msg)//将虚拟键转换为字符信息

       DispatchMessage(&Msg)//执行指令

}

函数GetMessage的形式

GetMessage

(

IpMSG,//指向MSG结构的指针

hwnd,

nMsgFilteMin,//用于消息过滤的最小消息号值

nMsgFilteMax//最大消息号值

)

 

消息响应机制

1、消息的组成:一个消息由一个消息名称(UINT),和两个参数(WPARAM,LPARAM)构成。当用户进行了输入或是窗口的状态发生改变时系统都会发送消息到某一个窗口。例如当菜单选中之后会有WM_COMMAND消息发送,WPARAM的高字中(HIWORD(wParam))是命令的ID号,对菜单来讲就是菜单ID。当然用户也可以定义自己的消息名称,也可以利用自定义消息来发送通知和传送数据。

2、谁将收到消息:一个消息必须由一个窗口接收。在窗口的过程(WNDPROC)中可以对消息进行分析,对自己感兴趣的消息进行处理。例如你希望对菜单选择进行处理那么你可以定义对WM_COMMAND进行处理的代码,如果希望在窗口中进行图形输出就必须对WM_PAINT进行处理。

3、未处理的消息到那里去了:M$为窗口编写了默认的窗口过程,这个窗口过程将负责处理那些你不处理消息。正因为有了这个默认窗口过程我们才可以利用Windows的窗口进行开发而不必过多关注窗口各种消息的处理。例如窗口在被拖动时会有很多消息发送,而我们都可以不予理睬让系统自己去处理。

4、窗口句柄:说到消息就不能不说窗口句柄,系统通过窗口句柄来在整个系统中唯一标识一个窗口,发送一个消息时必须指定一个窗口句柄表明该消息由那个窗口接收。而每个窗口都会有自己的窗口过程,所以用户的输入就会被正确的处理。例如有两个窗口共用一个窗口过程代码,你在窗口一上按下鼠标时消息就会通过窗口一的句柄被发送到窗口一而不是窗口二。

 

 

2-2窗口函数WinProc

定义了应用程序对接收到的不同消息的响应

包含了对各种可能接受到的消息的处理过程

实际上,是一个大型的switch-case构架

 

窗口函数的一般形式

LRESULTCALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM, lParam)

{

       switch(message)//switch语句仅支持整形作为变量,因此msg名称转换为UINT

       {

              case…

              …

              break;

              case WM_DESTROY;

                     PostQuitMessage(0);//退出窗口

              default: returnDefWindowProc(hwnd,message,wParam,IParam);//就是不处理

       }

       return(0);

}

 

两个新的数据类型

LRESUILT:消息处理的结果的返回值的数据类型,实际上是long

CALLBAK:表示这个函数是给系统调用的,也称作“回调“

 

windows有很多自定义的数据类型

WORD==unsignedshort

LONG==long

DWORD==unsignedlong

UINT==unsignedint

BOOL==bool

LPTSTR==指向字符串的32位指针

LPCTSTR==指向字符串常量的32位指针

 

三个比较重要的数据结构

 

 

1MSG 包含消息的全部信息

MSG结构体

typedefstruct tagMSG

{

       HWND hwnd;

       UINT message;//UINT 为unsigned int

       WPARAM wParam;

       LPARAM lParam;

       DWORD time;

       POINT pt;

} MSG;

 

2WNDCLASSEX 包含一个窗口类的全部信息及属性

typedefstruct

{

UINTcbsize;//窗口类的结构的大小,通常取sizeof(WNDCLASSEX)

UINTstyle;//窗口类的样式,一般设置为0

WNDPROClpfnWndProc;//指向窗口函数的指针

intcbClsExtra;//分配在窗口类结构后的字节数

intcbWndExtra;//分配在窗口实例后的字节数HANDLE

hlnstance;//定于窗口类的应用程序的实例句柄HICON

hIcon;//窗口类的图标

HCURSORhCursor;//窗口类的光标

HBRUSHhbrBackground;//窗口类的背景刷

LPCTSTRlpszMenuName;//窗口类的菜单资源名

LPCTSTRlpszClassName;//窗口类名

HICONhIconSm;//窗口类的小图标

}WNDCLASSEX;

 

3RECT    定义了一个矩形区域及其左上角和右下角的坐标

矩形结构比较简单

typedefstruct_RECT

{

LONGleft;//左上

LONGtop;//左下

LONGright;//右上

LONGbottom;//右下

}RECT;

 

 

 

 

 

 

Windows应用程序的常用消息

A·鼠标左键点击:WM_LBUTTONDOWN

IParam

       低字节X=LOWORD(IPARAM)光标x坐标

       高字节Y=HIWORD(IPRARM)y坐标

wParam

       一个整数值,用来表示鼠标键的按下状态

MK_LBUTTON

MK_MBUTTON

MK_RBUTTON

MK_SHIFT

MK_CONTROL

这些都是按下相应键产生的消息

e.g:

caseWM_LBUTTONDOWN:

       if(wparam&MK_SHIFT)

相应的还有这些消息(WM==Windows Message)

WM_LBUTTONUP

WM_LBUTTONDOWN

WM_RBUTTONUP

WM_RBUTTONDOWN

WM_MOUSEMOVE

WM_MBUTTONUP

WM_MBUTTONDOWN

 

B·WM_KEYDOWN 按下一个非系统键产生的消息

什么事系统键?

实现系统操作的组合键,比如ALT+F4

其中的WPARAM包含一个虚拟码

虚拟码:用来标识按下或释放的键位

格式为VK_ + 键位名称 + UP/DOWN或者没有

IParam记录了按键的重复次数,扫描码,转移代码,先前键位的状态等信息

e.g

VK_SHIFT, VK_SPACEUP

 

其他的信息

WM_CHAR按下一个非系统键时产生的信息

wParam为按键的ASCII码,IParam与WM_KEYDOWN的相同

 

C· WM_CREATE 由CreateWindow函数发出的消息

wParam:NULL IParam包含一个指向CREATESTRUCT(这个东西后面会讲到)数据结构的指针

 

 

D· WM_CLOSE和WM_DESTROY,分别时关闭窗口和DestroyWindow函数发出来的信息,其中的IParam和wParam都没有被使用过

 

E·WM_QUIT 由PostQuitMessage函数发出的信息

wParam:含退出代码,表示程序退出运行时的有关信息

IParam:未用

 

F· WM_PAINT 窗口属性发生变化时,窗口更新时产生的消息

用户区移动或显示

程序通过滚动条滚动窗口

用户窗口改变大小

下拉式菜单关闭并需要恢复被覆盖的部分

Windows系统清除对话框等对象,并需要恢复被覆盖的对象

这些动作都会产生WM_PAINT消息

 

 

 

一些方便记忆的命名规则的说明

hwnd:窗口类句柄

句柄:handle

窗口:window

连起来缩写即为hwnd

 

cursor 光标

 

LPTSTR

Long Pointer Ti STRing

同理LPTCSTR代表conststring

 

LPSZ:长整形的指针指向以零结尾的字符串

L:long

P:Pointer

sz是指 ZeroTerminated String ,   即以零("\0")结尾的字符串   (我在必应搜到的,应该正确了)

 

LRESUILT long result

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值