Windows 窗口与消息


WINDOWS 一些标识符常量

前缀常量
CS类风格选项
CW创建窗口选项
DT文本创建选项
IDI图标的ID号
MB消息框选项
SND声音选项
WM窗口消息
WS窗口风格

windows 程序设计hellownd.c解读

/*------------------------------------------------------------
HELLOWIN.C --Display "Hello, windows 8! in clinet area
------------------------------------------------------------*/
#include<Windows.h>
//#include<mmsystem.h>//l链接库中添加了WINMM.lib 多媒体库
//#pragma comment(lib,"winmm.lib")


LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);//窗口过程函数    声明

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance,
    PSTR szCmdLine, int iCmdShow)
{
    static TCHAR szAppName[] = TEXT("HelloWin");
    HWND                hwnd;
    MSG                 msg;
    WNDCLASS        wndclass;               //WNDCLASS 是一个结构体,声明一个窗口类wndclass
    /*
    原型:
    typedef struct tagWNDCLASSA
    {
    UINT            style;
    WNDPROC lpfnWndProc;
    int  cbClsExtra;
    int cbWndExtra;
    HINSTANCE hInstance;
    HICON hIcon;
    HCURSOR hCursor;
    HBRUSH hbrBackground;
    LPCSTR    lpszMenuName;
    LPCSTR  lpszClassName;
    }WNDCLASSA, *PWNDCLASSA,NEAR *NPWNDCLASSA,FAR*LPWNDCLASSA;

    原型:MSG
    typedef struct tagMSG {     // msg
    HWND hwnd;
    UINT message;
    WPARAM wParam;
    LPARAM lParam;
    DWORD time;
    POINT pt;
    } MSG;
    */
    /* 如下是对WNDCLASS 对象 wndclass 十个字段初始化*/
        wndclass.style = CS_HREDRAW | CS_VREDRAW;//水平尺寸|垂直尺寸
        wndclass.lpfnWndProc = WndProc;//引用WndProc-- 指向基于该窗口类所有窗口对象的窗口过程地址
        wndclass.cbClsExtra = 0;
        wndclass.cbWndExtra = 0;
        wndclass.hInstance = hInstance;//应用程序的一个实例句柄 winmain的一个参数
        wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);//加载图标,程序窗口左上角的图标,这里使用默认图标
        wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);//加载光标
        wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
        wndclass.lpszMenuName = NULL;
        wndclass.lpszClassName = szAppName;//窗口类名称,允许用户任意命名,一般只创建一个窗口时,通常和程序名相同
    if(!RegisterClass(&wndclass))
    {
        MessageBox(NULL, TEXT("This prigram requires Windows NT!"), szAppName, MB_ICONERROR);
        return 0;
    }
    //CreateWindow 基于窗口类创建一个窗口,其返回值为创建的窗口句柄,程序中用句柄对窗口进行引用
    hwnd = CreateWindow(szAppName,//将创建的窗口与声明的窗口类关连
        TEXT("The Hello Program"),
        WS_OVERLAPPEDWINDOW,//默认的一种窗口风格之一
        CW_USEDEFAULT,//初始x坐标
        CW_USEDEFAULT,//初始y坐标
        CW_USEDEFAULT,//初始x方向尺寸
        CW_USEDEFAULT,//初始y方向尺寸
        NULL,//父窗口句柄
        NULL,//窗口菜单句柄
        hInstance,//程序实例句柄
        NULL//创建参数
        );
    ShowWindow(hwnd, iCmdShow);//显示窗口在屏幕中
    UpdateWindow(hwnd);//指示窗口的自身进行重绘

    while (GetMessage(&msg, NULL, 0, 0))//重消息队列获取消息
    {
        TranslateMessage(&msg);//翻译一些键盘消息
        DispatchMessage(&msg);//将消息发送给窗口过程
    }
    return msg.wParam;
}


LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)//窗口过程即是系统对消息的处理函数
{
    HDC  hdc;
    PAINTSTRUCT ps;
    RECT        rect;
    TCHAR wndName[] = TEXT("NOTICE");//自定义的一个消息
    switch (message)
    {
    case WM_CREATE:
        PlaySound(TEXT("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC);//播放声音文件
        return 0;
    case WM_PAINT:
        hdc = BeginPaint(hwnd, &ps);//表明窗口绘制开始

        GetClientRect(hwnd, &rect);//获取窗口客户区的尺寸
        DrawText(hdc, TEXT("Hello,Windows 8!"), -1, &rect,//显示一个文本字符串
            DT_SINGLELINE | DT_CENTER | DT_VCENTER);
        EndPaint(hwnd, &ps);//结束窗口绘制
        return 0;
    case WM_DESTROY:
        PostQuitMessage(0);//将"退出消息"插入消息队列
        return 0;
    case WM_LBUTTONDOWN://自己添加的一条消息
        MessageBox(NULL, TEXT("LEFT BUTTON WAS PRESSED!"), wndName, MB_ICONWARNING);
        return 0;
    }
    return DefWindowProc(hwnd, message, wParam, lParam);//执行默认的消息处理,必须加上否则程序无法退出,这里只定义了三种消息,我自己添加了一条用来处理鼠标左键消息
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值