鱼C论坛

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

SDK各种方式创建的菜单

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

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

    HMENU hEdit = CreatePopupMenu(); 
    AppendMenu(hEdit,MF_STRING,1001,TEXT("新建(&N)"));
    AppendMenu(MainhMenu,MF_STRING|MF_POPUP,(UINT)hEdit,TEXT("文件(&F)"));
    
    HMENU hHelp = CreatePopupMenu();
    AppendMenu(hHelp,MF_STRING,1002,TEXT("查找(&F)"));
    AppendMenu(MainhMenu,MF_STRING|MF_POPUP,(UINT)hHelp,TEXT("关于(&A)"));

    //SetMenu(hWnd,MainhMenu);
}

LRESULT CALLBACK WndProc(HWND hWnd,
                         UINT uMsg,
                         WPARAM wParam,
                         LPARAM lParam)
{
    switch(uMsg)
    {
    case WM_CREATE:
        {
            OnCreate(hWnd,uMsg,wParam,lParam);
            break;
        }
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }
    return DefWindowProc(hWnd,uMsg,wParam,lParam);
}

void RegisterWnd(LPCTSTR lpClassName)
{
    WNDCLASSEX wce;
    wce.style = CS_HREDRAW|CS_VREDRAW;
    wce.lpfnWndProc = WndProc;
    wce.cbSize = sizeof(WNDCLASSEX);
    wce.cbClsExtra = 0;
    wce.cbWndExtra = 0;
    wce.hInstance = g_hInstance;
    wce.hIcon  = 0;
    wce.hCursor = 0;
    wce.hIconSm = 0;
    wce.hbrBackground = HBRUSH(COLOR_BTNFACE);
    wce.lpszClassName = lpClassName;
    wce.lpszMenuName = 0;
    if(!RegisterClassEx(&wce))
    {
        MessageBox(NULL,TEXT("注册失败"),TEXT("提示"),MB_OK);
    }

}

HWND CreateWnd(LPCTSTR lpClassName)
{
    HWND hWnd = CreateWindowEx(0,lpClassName,L"HELLO",
        WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,
        200,200,NULL,(HMENU)MainhMenu,g_hInstance,NULL);
    return hWnd;
}

void DisplayWnd(HWND hWnd)
{
    ShowWindow(hWnd,SW_SHOW);
    UpdateWindow(hWnd);
}

void Message()
{
    MSG msg;
    while(GetMessage(&msg,NULL,0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}

int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR     lpCmdLine,
                   int       nCmdShow)
{
    g_hInstance = hInstance;
    RegisterWnd(L"hello");
    HWND hWnd = CreateWnd(L"hello");
    DisplayWnd(hWnd);
    Message();
    return 0;
}

最佳答案

查看完整内容

因为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-11-22 03:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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