2 窗口与消息

案例代码

#include <Windows.h>
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
    HDC hdc;
    PAINTSTRUCT ps;
    RECT rect;
    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,windows98!"),-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);
}

int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE preHinstance,PSTR cmdLine,int icmdShow){
    
    static TCHAR szAppName[] = TEXT("helloWin");
    HWND hwnd;//画布
    MSG msg;//信息
    WNDCLASS wndclass;//窗体类别
//对wndclass进行初始化开始 //horizontal redraw //vertical redraw wndclass.style = CS_HREDRAW | CS_VREDRAW; //窗口类确定了处理窗口消息的窗口过程,实际是指向该函数的指针 wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; //当前应用程序实例句柄 wndclass.hInstance = hinstance; //加载图标,获得图标句柄以供程序使用 //针对函数LoadIcon,如果要加载本程序内的图标,需将NULL换位本程序实例的句柄 //第二个参数用于识别该图标 //IDI ID for an icon wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION); //加载鼠标光标,获得鼠标句柄以供程序使用 wndclass.hCursor = LoadCursor(NULL,IDC_ARROW); //为该窗口的客户区指定背景色 //handle to a brush //GetStockObject,Windows API函数。该函式检索预定义的备用笔、刷子、字体或者调色板的句柄。 wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = szAppName; //在创建应用程序窗口之前,必须调用函数RegisterClass来注册窗口类。 if(!RegisterClass(&wndclass))//为应用窗口注册一个窗口类 { MessageBox(NULL,TEXT("The program requires windows NT!"),szAppName,MB_ICONERROR); return 0; } //基于窗口类创建一个窗口 //handle to the window 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); // 创建参数 //在CreateWindow完成之后只是在内存中保存了createWindow的一些信息,如果要在屏幕中显示窗口 ShowWindow(hwnd,SW_SHOWNORMAL); //指示窗口对自身进行重绘 UpdateWindow(hwnd); //从消息队列中获取信息,一直检索 //第二个参数~第四个参数均制为NULL或0表明该程序希望获取由该程序所创建的所有窗口消息 while(GetMessage(&msg,NULL,0,0)) { //翻译一些键盘消息 //将msg结构返给windows以进行某些键盘消息的转换 TranslateMessage(&msg); //将消息发送给窗口过程 DispatchMessage(&msg); } //return msg.wParam; return 0; }

提示

(一)如果想要调用PlaySound函数,需要为环境添加winmm.lib的引用,否则会出现如下错误:

无法解析的外部符号 __imp__PlaySoundA@12,该符号在函数 "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z) 中被引用。

具体配置步骤如下:

①:找到解决方案资源管理器,对自己的项目点击右键,选择属性

②:找到配置属性下的连接器下的输入

③:选择附加依赖项后的小三角

④:添加winmm.lib,点击确定,应用即可

⑤:点击运行,即可得到想要的效果

(二)我用的是windows XP经典开机音乐代替hellowin.wav,好资源是需要分享滴,在此分享给大家:helloWin



原文地址:https://www.cnblogs.com/huanbia/p/4642927.html