WinAPI创建窗口,模仿书敲了遍

来源:互联网 发布:电力系统波形分析软件 编辑:程序博客网 时间:2024/06/05 21:18


看来重头学起是有必要的,现在看窗口过程,哦,原来消息是这样处理的啊~~~


还是有好多不懂


退出操作流程:destroy --> PostQuitMessage --> 0 == GetMessage


BeginPaint 和 EndPaint还真的要用啊,亏我还都没用到过


//// Sound Window//// Created by sun_huihua at 2013.04.14//#include <atlstr.h>#include <Windows.h>#pragma comment(lib, "Winmm.lib")//! 窗口过程LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);int WINAPI WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in LPSTR lpCmdLine, __in int nShowCmd ){//! 程序名static TCHAR szAppName[] = TEXT("Hello Windows!");//! 注册窗口类WNDCLASSEX wndClassEx;wndClassEx.cbSize= sizeof(WNDCLASSEX);wndClassEx.style= CS_HREDRAW | CS_VREDRAW;wndClassEx.lpfnWndProc= WndProc;//< 窗口过程wndClassEx.cbClsExtra= 0;wndClassEx.cbWndExtra= 0;wndClassEx.hInstance= hInstance;//< 当前的程勋实例wndClassEx.hIcon= LoadIcon(NULL, IDI_ASTERISK);wndClassEx.hCursor= LoadCursor(NULL, IDC_ARROW);wndClassEx.hbrBackground= (HBRUSH)GetStockObject(WHITE_BRUSH);wndClassEx.lpszMenuName= NULL;//< 没有菜单wndClassEx.lpszClassName= szAppName;//< 窗口类名称wndClassEx.hIconSm= LoadIcon(NULL, IDI_QUESTION);if (!RegisterClassEx(&wndClassEx)){DWORD dwErr = GetLastError();CString strMsg(TEXT(""));strMsg.Format(TEXT("注册窗口失败,丫的确认是不是系统太旧了,只支持NT,错误码:0x%X\n"), dwErr);MessageBox(NULL, strMsg, szAppName, MB_ICONERROR);return 0;}//! 创建窗口HWND hWnd = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW,szAppName,TEXT("Play 信仰.mp3"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,//< MSDN错了么,这个0的话,窗口显示成0了NULL,//< 无父窗口NULL,//< 无菜单hInstance,NULL//< 创建后,不需要添加附加信息到WM_CREATE);if (NULL == hWnd){DWORD dwErr = GetLastError();CString strMsg(TEXT(""));strMsg.Format(TEXT("Oh, no! 这是不可能地,错误码:0x%X\n"), dwErr);MessageBox(NULL, strMsg, szAppName, MB_ICONERROR);return 0;}//! 显示窗口ShowWindow(hWnd, nShowCmd);UpdateWindow(hWnd);//< 发送Paint消息给窗口//! 窗口消息分发MSG msg = {0};BOOL bRet;while((bRet = GetMessage(&msg, NULL, 0, 0)) != 0){if (-1 == bRet){//! 错误处理CString strErr(TEXT(""));strErr.Format(TEXT("啥消息,出错了,错误码:0x%X\n"), GetLastError());MessageBox(hWnd, strErr, szAppName, MB_ICONERROR);}else{TranslateMessage(&msg); DispatchMessage(&msg); }}return msg.wParam;}LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){HDChDC;PAINTSTRUCTps;RECTrect;//! 分析消息switch (uMsg){case WM_CREATE:{//! 播放MP3mciSendString(TEXT("open 张信哲-信仰.mp3 alias betabin"), NULL, 0, NULL);mciSendString(TEXT("play betabin repeat"), NULL, 0, NULL);}return 0;case WM_PAINT:{hDC = BeginPaint(hWnd, &ps);GetClientRect(hWnd, &rect);DrawText(hDC, TEXT("张信哲-信仰.mp3"), -1, &rect,DT_SINGLELINE | DT_CENTER | DT_VCENTER);EndPaint(hWnd, &ps);}return 0;case WM_DESTROY:{PostQuitMessage(0);}return 0;}return DefWindowProc(hWnd, uMsg, wParam, lParam);}



原创粉丝点击