鱼C论坛

 找回密码
 立即注册
查看: 2961|回复: 3

SDK各种方式创建的菜单

 关闭 [复制链接]
发表于 2014-11-23 21:08:25 | 显示全部楼层 |阅读模式
30鱼币
  1. #include <Windows.h>
  2. HINSTANCE g_hInstance;
  3. HMENU MainhMenu;

  4. void OnCreate(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
  5. {
  6.     MainhMenu  = CreateMenu(); //为什么在这里创建的窗口句柄,放在窗口CreateWindowEx中显示不出来?

  7.     HMENU hEdit = CreatePopupMenu();
  8.     AppendMenu(hEdit,MF_STRING,1001,TEXT("新建(&N)"));
  9.     AppendMenu(MainhMenu,MF_STRING|MF_POPUP,(UINT)hEdit,TEXT("文件(&F)"));
  10.    
  11.     HMENU hHelp = CreatePopupMenu();
  12.     AppendMenu(hHelp,MF_STRING,1002,TEXT("查找(&F)"));
  13.     AppendMenu(MainhMenu,MF_STRING|MF_POPUP,(UINT)hHelp,TEXT("关于(&A)"));

  14.     //SetMenu(hWnd,MainhMenu);
  15. }

  16. LRESULT CALLBACK WndProc(HWND hWnd,
  17.                          UINT uMsg,
  18.                          WPARAM wParam,
  19.                          LPARAM lParam)
  20. {
  21.     switch(uMsg)
  22.     {
  23.     case WM_CREATE:
  24.         {
  25.             OnCreate(hWnd,uMsg,wParam,lParam);
  26.             break;
  27.         }
  28.     case WM_DESTROY:
  29.         PostQuitMessage(0);
  30.         return 0;
  31.     }
  32.     return DefWindowProc(hWnd,uMsg,wParam,lParam);
  33. }

  34. void RegisterWnd(LPCTSTR lpClassName)
  35. {
  36.     WNDCLASSEX wce;
  37.     wce.style = CS_HREDRAW|CS_VREDRAW;
  38.     wce.lpfnWndProc = WndProc;
  39.     wce.cbSize = sizeof(WNDCLASSEX);
  40.     wce.cbClsExtra = 0;
  41.     wce.cbWndExtra = 0;
  42.     wce.hInstance = g_hInstance;
  43.     wce.hIcon  = 0;
  44.     wce.hCursor = 0;
  45.     wce.hIconSm = 0;
  46.     wce.hbrBackground = HBRUSH(COLOR_BTNFACE);
  47.     wce.lpszClassName = lpClassName;
  48.     wce.lpszMenuName = 0;
  49.     if(!RegisterClassEx(&wce))
  50.     {
  51.         MessageBox(NULL,TEXT("注册失败"),TEXT("提示"),MB_OK);
  52.     }

  53. }

  54. HWND CreateWnd(LPCTSTR lpClassName)
  55. {
  56.     HWND hWnd = CreateWindowEx(0,lpClassName,L"HELLO",
  57.         WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,
  58.         200,200,NULL,(HMENU)MainhMenu,g_hInstance,NULL);
  59.     return hWnd;
  60. }

  61. void DisplayWnd(HWND hWnd)
  62. {
  63.     ShowWindow(hWnd,SW_SHOW);
  64.     UpdateWindow(hWnd);
  65. }

  66. void Message()
  67. {
  68.     MSG msg;
  69.     while(GetMessage(&msg,NULL,0,0))
  70.     {
  71.         TranslateMessage(&msg);
  72.         DispatchMessage(&msg);
  73.     }
  74. }

  75. int WINAPI WinMain(HINSTANCE hInstance,
  76.                    HINSTANCE hPrevInstance,
  77.                    LPSTR     lpCmdLine,
  78.                    int       nCmdShow)
  79. {
  80.     g_hInstance = hInstance;
  81.     RegisterWnd(L"hello");
  82.     HWND hWnd = CreateWnd(L"hello");
  83.     DisplayWnd(hWnd);
  84.     Message();
  85.     return 0;
  86. }
复制代码

最佳答案

查看完整内容

因为CreateWnd中的“CreateWindowEx”发生在OnCreate中的“MainhMenu”之前,你调试下就知道了,不可能调用未来的东西,因为它还没有发生

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-11-23 21:08:26 | 显示全部楼层
因为CreateWnd中的“CreateWindowEx”发生在OnCreate中的“MainhMenu”之前,你调试下就知道了,不可能调用未来的东西,因为它还没有发生
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-11-27 11:22:24 | 显示全部楼层
感觉好复杂,本来还想学学的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-11-30 01:51:37 | 显示全部楼层
我还是想学学,虽然很复杂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-28 19:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表