c/c++语言开发共享为基于对话框的应用程序实现回调函数

我正在阅读一篇关于如何在Visual C ++中创建基于对话框的GUI应用程序的非常古老的教程( 源代码 – 葡萄牙语)。 基于我对WinAPI编程的薄弱知识,我决定修改建议的代码主要是为了实现两件事:

1)与Unicode编程标准的一致性(例如使用wWinMainMessageBoxW而不是WinMainMessageBox/MessageBoxA )。 这样的“标准”似乎全面实施。 示例: 这个问题(评论)

2)在创建非空Win32项目时,Visual Studio提供的模型的一致性。 我这样做并注意到:

_
因此,有一个奇怪的行为,其中名为Confirm的MessageBox失焦 – 即我无法单击“确定”和“取消”按钮。

问题:我是否正确地假设Visual Studio生成的模板代码比教程中的代码更正确,这对我来说似乎不值得信任? 如果是的话,我忘了什么吗? 我的代码出了什么问题,为什么我不能单击Messagebox按钮?

我的最终代码如下:

 #define WIN32_LEAN_AND_MEAN #include  #include "resource.h" INT_PTR CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_INITDIALOG: return (INT_PTR)TRUE; case WM_DESTROY: PostQuitMessage(0); break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: if (MessageBoxW(hWnd, L"Close?", L"Confirm", MB_OKCANCEL) == IDOK) DestroyWindow(hWnd); break; // more code to place here } break; default: return DefWindowProc(hWnd, msg, wParam, lParam); } return 0; } int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow) { int ret = DialogBoxW(hInstance, MAKEINTRESOURCEW(IDD_DIALOG1), NULL, WndProc); return 0; } 

为了完整性,下面是基于教程的代码,它实际上工作正常:

 BOOL CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_INITDIALOG: return TRUE; case WM_CLOSE: DestroyWindow(hWnd); break; case WM_DESTROY: PostQuitMessage(0); break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: if (MessageBoxW(hWnd, L"Close?", L"Confirm", MB_OKCANCEL) == IDOK) DestroyWindow(hWnd); break; } break; default: return FALSE; } return TRUE; } 

    所以,我明白了。 Visual Studio向导创建的代码确实演示了Windows API的正确实现。

    注意事项:

      以上就是c/c++开发分享为基于对话框的应用程序实现回调函数相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/549312.html

      (0)
      上一篇 2021年1月14日
      下一篇 2021年1月14日

      精彩推荐