003_Windows程序设计--窗口与消息

来源:互联网 发布:安装ubuntu系统 编辑:程序博客网 时间:2024/05/20 23:07

Windows编程模型

事件驱动编程模型
一切都是窗口:窗口和句柄
消息与消息队列
设计->注册->创建->显标更新->消息。

#include <windows.h>//窗口过程回调函数       H是Handler的简写,句柄LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);//相当于 int main()//                 实例句柄int WINAPI WinMain(HINSTANCE hInstance,                   HINSTANCE hPrevInstance,                   LPSTR lpszCmdLine,                   int nCmdShow){    HWND hwnd;//窗口句柄    MSG msg;//消息    WNDCLASS wc;//窗口类    //1.设计一个窗口类    wc.style = 0;    wc.lpfnWndProc = (WNDPROC)WndProc;    wc.cbClsExtra = 0;    wc.cbWndExtra = 0;    wc.hInstance = hInstance;    wc.hIcon = LoadIcon(NULL, IDI_WINLOGO);    wc.hCursor = LoadCursor(NULL,IDC_ARROW);    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);    wc.lpszMenuName = NULL;    wc.lpszClassName = TEXT("MyWndClass");    //2.注册窗口类    RegisterClass(&wc);    //3.创建窗口    hwnd = CreateWindow(        TEXT("MyWndClass"),        TEXT("Hello SDK Application"),        WS_OVERLAPPEDWINDOW,        CW_USEDEFAULT,        CW_USEDEFAULT,        CW_USEDEFAULT,        CW_USEDEFAULT,        NULL,//父窗口句柄        NULL,//窗口菜单句柄        hInstance,        NULL);    //4.显示和更新窗口    ShowWindow(hwnd,nCmdShow);    UpdateWindow(hwnd);    //5.消息循环    while(GetMessage(&msg,NULL,0,0)){        TranslateMessage(&msg);        DispatchMessage(&msg);//转发到窗口过程    }    return msg.wParam;}LRESULT CALLBACK WndProc(HWND hwnd,                         UINT message,                         WPARAM wParam,                         LPARAM lParam){    PAINTSTRUCT ps;    HDC hdc;//DC句柄    RECT rect;    //对各种消息进行处理    switch(message)    {    case WM_SIZE:        //重画 Paint        return 0;    case WM_LBUTTONDOWN:        //MessageBox(hwnd,TEXT("Mouse Clicked!"),TEXT("消息"),MB_OK);        //PostQuitMessage(0);        return 0;    case WM_PAINT: //绘制消息        hdc = BeginPaint(hwnd,&ps);        GetClientRect(hwnd,&rect);        //Ellipse(hdc,0,0,200,100);        DrawText(hdc,TEXT("Hello, Windows!"),-1,&rect,            DT_SINGLELINE | DT_CENTER | DT_VCENTER);        EndPaint(hwnd,&ps);        return 0;    case WM_DESTROY://销毁窗口消息(关闭)        PostQuitMessage(0);        return 0;    }    return DefWindowProc(hwnd,message,wParam,lParam);}

句柄

handle
HINSTANCE//模块句柄
HWND //窗口句柄
HDC //画布句柄
HICON //图标句柄
HCURSOR //光标句柄
HBRUSH //画刷句柄

数据结构

WNDCLASS 窗口类

typedef struct _WNDCLASS {UINT style;           // 窗口类型WNDPROC lpfnWndProc;  //窗口处理函数int cbClsExtra;       //窗口扩展int cbWndExtra;       //窗口实例扩展HINSTANCE hInstance;  //实例句柄HICON hIcon;          //窗口的最小化图标HCURSOR hCursor;      //窗口鼠标光标HBRUSH hbrBackground; //窗口背景色LPCTSTR lpszMenuName; //窗口菜单LPCTSTR lpszClassName; // 窗口类名} WNDCLASS, *LPWNDCLASS;

MSG 消息结构

typedef struct tagMSG{            HWND hwnd;  窗口句柄(索引内存当中的资源)            UINT(无符号整型)  message;              WPARAM(整型) wParam; //关于消息的附加参数,例如:按下一个键,具体是哪个按键            LPARAM(整型) LParam; //关于消息的附加参数            DWORD(32位整数) time;//消息被传递时候的时间            POINT(坐标结构体) pt; //消息被传递时候,光标在屏幕上的位置} MSG;

PAINTSTRUCT画布结构

typedef struct tagPAINTSTRUCT {  HDC  hdc;//用于绘制的句柄  BOOL fErase;//如果为非零值则擦除背景,否则不擦除背景  RECT rcPaint;//通过制定左上角和右下角的坐标确定一个要绘制的矩形范围,该矩形单位相对于客户区左上角  BOOL fRestore;  BOOL fIncUpdate;  BYTE rgbReserved[32];} PAINTSTRUCT, *PPAINTSTRUCT;

RECT 矩型结构

typedef struct tagRECT{LONG left;  //指定矩形左上角的X坐标LONG top;   //指定矩形左上角的Y坐标LONG right; //指定矩形右下角的X坐标LONG bottom;//指定矩形右下角的Y坐标} RECT, *PRECT, NEAR *NPRECT, FAR *LPRECT;

匈牙利标记法

控件命名:    fm         窗口    cmd        按钮    cob        combo,下拉式列表框    txt        文本输入框    lab        labal,标签    img        image,图象    pic        picture    grd        Grid, 网格    scr        滚动条    lst        列表框    frm        fram变量命名:    a       数组    b       布尔    by      字节    ch  char,TCHAR    f       浮点    d       双精度浮点    h   handle,句柄    i   int    n   无符号整形    p   指针    sz      0结尾的字符串    str     CString    fn      函数    v       无类型    w   word    dw      dword    x,y 坐标    Max     最大    Min     最小    Init    初始化    T and Temp 临时变量    资源名字定义格式:    菜单:IDM_XX或者CM_XX    位图:IDB_XX    对话框:IDD_XX    字符串:IDS_XX    DLGINIT:DIALOG_XX    ICON:IDR_XX
0 0
原创粉丝点击