分享

Windows应用程序基础知识 - 笔记 - 吴锦华 - CSDN学生大本营 - Powe...

 verychen 2011-04-11

Windows应用程序的基本概念

1.1.3 Windows的一个特殊数据类型——句柄

        

句柄类型

说明

HWND

窗口句柄

HINSTANCE

当前程序应用实例句柄

HCURSOR

光标句柄

HFONT

字体句柄

HPEN

画笔句柄

HBRUSH

画刷句柄

HDC

图形设备环境句柄

HBITMAP

位图句柄

HICON

图标句柄

HMENU

菜单句柄

HFILE

文件句柄

1.1.4 Windows应用程序的数据类型

         typedef unsighed long DWORD;

         typedef int BOOL;

         typedef unsighed char BYTE;

         typedef unsighed short WORD;

         typedef float FLOAT;

         typedef unsighed int UINT;

        

         typedef struct  tag_POINT    //描述一个点的位置

         {

                   LONG x,y;

         }POINT;

        

         typedef struct tag_RECT{      //描述一个矩形

                                     LONG left;

                                     LONG  top;

                                     LONG  right;

                                     LONG  bottom;

                            }RECT;

1.1.5 消息与消息循环

         1.事件与消息

            消息结构的定义如下:

            Typedef struct  tagMSG

            {

                            HWND hwnd;   //产生消息的窗口句柄

                            UINT message;   //消息的标识码

                            WPARAM wParam;           //消息的附加消息1

                            LPARAM lParam;              //消息的附加消息2

                            DWORD time;           //消息进入消息队列的时刻

                            POINT pt;                            //表示发送该消息是光标的位置

                   }MSG;

                  

消息的标识

说明

WM_LBUTTONDOWN

按下鼠标左键时产生的消息

WM_LBUTTONUP

放开鼠标左键时产生的消息

WM_RBUTTONDOWN

按下鼠标右键时产生的消息

WM_RBUTTONUP

放开鼠标右键时产生的消息

WM_LBUTTONDBLCLK

双击鼠标左键时产生的消息

WM_RBUTTONDBLCLK

双击鼠标右键时产生的消息

WM_CHAR

按下非系统键时产生的消息,其中wParam为键的ASCII

WM_CREATE

CreateWindow( )函数产生的消息

WM_CLOSE

关闭窗口时产生的消息

WM_DESTROY

消除窗口时产生的消息

WM_QUIT

退出程序时,有PostQuitMessage( )函数产生的消息

WM_PAINT

需要窗口重画时产生的消息

 

2.消息循环

         while( GetMessage(&msg,NULL,NULL,NULL))

         {

                   TranslateMessage(&msg);

                   DispatchMessage(&msg);

         }

1.2 Windows应用程序的结构

1.2.1 主函数

         int WINAPI WinMain(

                            HINSTANCE hInstance,

                            HINSTANCE hPrevInstance,

                            LPSTR lpCmdLine,

                            int nCmdShow

                            );

1.       描述窗口属性的数据结构——窗口类型

typedef struct  _WNDCLASS

{

           UINT        style;                //窗口样式,一般设置为0

           WNDPROC  lpfnWndProc;               //指向窗口函数的指针

           int   cbClsExtra;             //一般设置为0

           int   cbWndExtra;             //一般设置为0

           HANDLE   hInstance;               //定义应用程序的实例句柄

           HICON    hIcon;                //窗口的图标

           HCURSOR        hCursor;            //窗口的光标

           HBRUSH                    hbrBackground;                 //窗口的背景颜色

           LPCTSTR                    lpszMenuName;                //窗口的菜单资源名

           LPCTSTR                    lpszClassName;                 //窗口类型名

}WNDCLASS;

         2.注册窗口类型

                   BOOL RegisterClass (WNDCLASS  &wc);

         3.创建窗口

                   HWND CreateWindow(

                                     LPCTSTR  lpClassName,                                     //窗口类型名

                                     LPCTSTR           lpWindowName,                      //窗口实例的标题

                                     DWORD  dwStyle,                                               //窗口风格

                                     int            x,                                                     //窗口左上角位置坐标值x

                                     int              y,                                                     //窗口左上角位置坐标值y

                                     int              nWidth,                                         //窗口的宽度

                                     int            nHeight,                                        //窗口的高度

                                     HWND    hWndParent,                               //父窗口的句柄

                                     HMENU   hMenu,                                         //主菜单的句柄

                                     HANDLE hInstance,                                               //应用程序实例句柄

                                     LPVOID   lpParam                                        //该值为NULL

                            );

          4.显示窗口

                   BOOL ShowWindow(

                                                        HWND hWnd,   //窗口句柄

                                                        int  nCmdShow       //窗口的显示方式

                                                        );

                   5.消息循环

                            while( GetMessage(&msg,NULL,NULL,NULL))

                            {

                                     TranslateMessage(&msg);

                                     DispatchMessage(&msg);

                            }

    1.2.2 消息的处理部分——窗口函数

                            LRESULT CALLBACK WndProc (HWND hwnd, // 派送消息的窗口句柄

                                                                                    UINT message,   //系统传递来的消息标识

                                                                                    WPARAM wParam,//消息的附加参数(32位)

                                                                                    LPARAM lParam)      //消息的附加参数(32位)                                                                                                                                                                                          

      1.2.3 Windows系统、主函数、窗口函数之间的关系

1-1  一个简单的Windows程序。当用鼠标左键单击程序窗口的用户区时,计算器的扬声器会发出“叮”的声音。

#include<windows.h>

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE PreInstance,LPSTR lpDmdLine,int cCmdShow)

{

         HWND hwnd;

         MSG msg;

         char lpszClassName[]="ä¡ã¨²";

         WNDCLASS wc;

         wc.style=0;

         wc.lpClsExtra=0;

         wc.cbWndExtra=0;

         wc.hInstance=hInstance;

         wc.hIcon=LoadIcon(NULL,IDC_APPLICATION);

         wc.hCursor=LoadCursor(NULL,IDC_ARROW);

         wc.hbrBackgroun=(HBURSH)GetStockObject(WHITE_BRUSH);

         wc.lpszMenuName=NULL;

         wc.lpszclassName=lpszClassName;

 

         RegisterClass(&wc);

         hwnd=CreateWindow(lpszClassName,

                                                        "Windows",

                                                        WS_OVERLAPPEDWINDOW,

                                                        120,50,800,600,

                                                        NULL,

                                                        NULL,

                                                        hInstance,

                                                        NULL);

         ShowWindow(hwnd,nCmdShow);

         UpdateWindow(hwnd);

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

         {

                   TranslateMessage(&msg);

                   DispatchMessage(&msg);

         }

         return msg.wParam;

}

LRESUT CALLBACK WndProc(HWND hwnd,

                                                        UINT message,

                                                        WPARAM wParam,

                                                        LPARAM lParam)

{

         switch(message)

         {

                   case WM_LBUTTONDOWN: MessageBeep(0);

                                                                  break;

                   case WM_DESTROY:PostQuitMessage(0);

                                                        break;

                   default;

                                     return DefWindowProc(hwnd,message,wParam,lParam);

         }

         return 0;

}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多