VC++ windows编程(MFC)初探

交互设计

  1.LoadStringW()函数解析

  LoadStringW( _In_opt_ HINSTANCE hInstance, //实例句柄 _In_ UINT uID, //定义好的资源ID _Out_writes_to_(cchBufferMax, return + 1) LPWSTR lpBuffer,//资源指针 _In_ int cchBufferMax//资源大小 );

  这个函数用来加载字符串:

  一个应用窗口程序运行就是在一个实例中,如果运行了两个窗口的应用程序,就是两个实例。

  实例句柄就是指向实例的指针。

  已有的资源就已经在项目文件中了,项目文件会对资源提供ID号,我们加载的字符串就是这个资源。

  缓存区指针就是对加载的资源进行存储区域的指针。

  存放资源缓存区的大小就是对加载的资源进行存储区域的大小。

  整个过程:对项目文件的资源(这里是指字符串,通过ID号找到)加载到实例的缓存区(通过指针加载,且指定缓存区大小)。

  HINSTANCE 是“句柄型”数据类型。相当于装入到了内存的资源的ID。HINSTANCE对应的资源是instance.句柄实际上是一个 无符号长整数。

  2.窗口类结构体WNDCLASSEX分析

  typedef struct{ UINT cbSize; UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCTSTR lpszMenuName; LPCTSTR lpszClassName; HICON hIconSm;} WNDCLASSEX, *PWNDCLASSEX;1. cbSize WNDCLASSEX 的大小。在调用GetClassInfoEx前必须要先设置它值。我们可以用sizeof(WNDCLASSEX)来获得准确的值。2. style 窗口类的样式,它的值可以是窗口样式值的任意组合。可以有以下的值:1. cbSize WNDCLASSEX 的大小。在调用GetClassInfoEx前必须要先设置它值。我们可以用sizeof(WNDCLASSEX)来获得准确的值。

  2. style 窗口类的样式,它的值可以是窗口样式值的任意组合。

  CS_BYTEALIGNCLIENT

  窗口的客户区域以“字符边界”对齐,当系统调整窗口的水平位置时,客户区域的左边坐标是8的整数倍

  CS_BYTEALIGNWINDOW

  窗口以“字符边界”对齐,当系统调整窗口的水平位置时,客户区域的左边坐标是8的整数倍

  CS_CLASSDC

  分配一个设备环境并被类中的所有窗体共享。它是可以适用于一个应用程序的若干线程创建的一个相同类的窗体。当多个线程试图同时使用相同的设备环境时,系统只允许一个线程成功地进行绘图操作

  CS_DBLCLKS

  当用户双击窗口时,将向窗口函数发送鼠标双击消息

  CS_GLOBALCLASS

  指定此窗体类是一个应用程序全局类。应用程序全局类是由一个在进程中对所有模块有效的exe或dll注册的窗体类

  CS_HREDRAW

  如果窗口的位置或宽度发生改变,将重绘窗口

  CS_NOCLOSE

  窗口中的“关闭”按钮不可见

  CS_OWNDC

  为同一个窗口类中的每个窗口创建一个唯一的设备上下文

  CS_PARENTDC

  设置子窗口中剪下的矩形区域到父窗口中,以使子窗口可以在父窗口上绘图。指定该风格可以提高应用程序的性能

  CS_SAVEBITS

  把被窗口遮掩的屏幕图像作为位图保存起来。当该窗口被移动时,Windows操作系统使用被保存的位图来重建屏幕图像

  CS_VREDRAW

  如果窗口的位置或高度改变,将重绘窗口

  3. lpfnWndProc 指向窗口处理函数(回调函数)。处理窗口事件,像单击鼠标会怎样,右击鼠标会怎样,都是由此函数控制的。

  4. cbClsExtra 为窗口类的额外信息做记录,初始化为0。

  5. cbWndExtra 记录窗口实例的额外信息,系统初始为0.如果程序使用WNDCLASSEX注册一个从资源文件里创建的对话框,则此参数必须设置为DLGWINDOWEXTRA

  6. hInstance:本模块的事例句柄。

  7. hIcon 窗口类的图标,为资源句柄,如果设置为NULL,系统将为窗口提供一个默认的图标。

  8. hCursor 窗口类的鼠标样式,为鼠标样式资源的句柄,如果设置为NULL,系统提供一个默认的鼠标样式。

  9. hbrBackground 窗口类的背景刷,为背景刷句柄,也可以为系统颜色值,如果颜色值已给出,则必须转化为以下的HBRUSH的值

  · COLOR_ACTIVEBORDER

  · COLOR_ACTIVECAPTION

  · COLOR_APPWORKSPACE

  · COLOR_BACKGROUND

  · COLOR_BTNFACE

  · COLOR_BTNSHADOW

  · COLOR_BTNTEXT

  · COLOR_CAPTIONTEXT

  · COLOR_GRAYTEXT

  · COLOR_HIGHLIGHT

  · COLOR_HIGHLIGHTTEXT

  · COLOR_INACTIVEBORDER

  · COLOR_INACTIVECAPTION

  · COLOR_MENU

  · COLOR_MENUTEXT

  · COLOR_SCROLLBAR

  · COLOR_WINDOW

  · COLOR_WINDOWFRAME

  · COLOR_WINDOWTEXT

  10. lpszMenuName 指向一个以NULL结尾的字符串,同目录资源的名字一样。如果使用整型id表示菜单,可以用MAKEINTRESOURCE定义一个宏。如果它的值为NULL,那么该类创建的窗口将都没有默认的菜单。

  11. lpszClassName 指向窗口类的指针,LPSTR类型。

  12. hIconSm 小图标的句柄,在任务栏显示的图标,可以和上面的那个一样。

  3.资源文件

  自己制作一个ICO图标文件:

  最后,编译代码,生成应用程序,运行后,如图所示:

  NICE[呲牙][偷笑][偷笑][呲牙]

标签: 交互设计