WINDOWS API创建父窗口,子窗口,菜单

#include "resource.h"这个可以通过资源文件添加菜单资源。
添加好后,必须在资源文件中进行编译执行,否则可能会出现找不到菜单句柄ID,或者即使能找到句柄ID,但是在窗口执行后,
你会开心的发现只有菜单,却死活都点不出菜单项(作者本人眼泪崩溃过)


#include<windows.h>
#include <tchar.h>
#include<stdio.h>
HINSTANCE hinst;
#include "resource.h"
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int);
LRESULT CALLBACK MainWinProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    WNDCLASSEX wcex;//父窗口创建
    HWND hwnd;
    MSG msg;
    BOOL fGotMessage;
    hinst = hInstance;
    wcex.cbSize = sizeof(WNDCLASSEX);
    wcex.style = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc = MainWinProc;
    wcex.cbClsExtra = 0;
    wcex.cbWndExtra = 0;
    wcex.hInstance = hInstance;
    wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wcex.hCursor = LoadCursor(NULL, IDC_CROSS);
    wcex.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wcex.lpszMenuName = (char*) IDR_MENU1;//菜单初始化定义//使用(char*)目的是
    //将菜单句柄ID号由数字转成字符形式
    wcex.lpszClassName = "MainWClass";
    wcex.hIconSm = (HICON)LoadImage(hInstance, MAKEINTRESOURCE(5), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CXSMICON), LR_DEFAULTCOLOR);

    WNDCLASSEX wce;//子窗口注册
    wce.cbSize = sizeof(WNDCLASSEX);
    wce.style = CS_HREDRAW | CS_VREDRAW;
    wce.lpfnWndProc = DefWindowProc;
    wce.cbClsExtra = 0;
    wce.cbWndExtra = 0;
    wce.hInstance = hInstance;
    wce.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wce.hCursor = LoadCursor(NULL, IDC_CROSS);
    wce.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wce.lpszMenuName = NULL;
    wce.lpszClassName = "Child";
    wce.hIconSm = (HICON)LoadImage(hInstance, MAKEINTRESOURCE(5), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CXSMICON), LR_DEFAULTCOLOR);

    if (!RegisterClassEx(&wcex))
    {
        return 1;
    }
    if (!RegisterClassEx(&wce))
    {
        return 1;
    }

    hwnd = CreateWindow("MainWClass", "window", WS_OVERLAPPEDWINDOW, 0, 0, 1000, 1000, NULL, NULL, hInstance, NULL);
    //父窗口设计
    HWND C1 = CreateWindow("Child", "c1", WS_CHILD | WS_VISIBLE | WS_OVERLAPPEDWINDOW, 100, 20, 30, 70, hwnd, NULL, hInstance, NULL);
    //凡是C开头的都是子窗口创建
    HWND C2 = CreateWindow("Child", "c1", WS_CHILD | WS_VISIBLE | WS_OVERLAPPEDWINDOW, 400, 20, 30, 70, hwnd, NULL, hInstance, NULL);
    HWND C13 = CreateWindow("Child", "c1", WS_CHILD | WS_VISIBLE | WS_OVERLAPPEDWINDOW, 600, 20, 30, 70, hwnd, NULL, hInstance, NULL);

    if (!hwnd)
    {
        return 1;
    }
    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);

    while ((fGotMessage = GetMessage(&msg, NULL, 0, 0)) != 0 && fGotMessage != -1)
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return msg.wParam;
}
MSG unse;

LRESULT CALLBACK MainWinProc(HWND  hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{

    switch (uMsg)
    {
    case WM_COMMAND://菜单信息处理函数,定义点击目的
    {
         
        switch (LOWORD(wParam))
        {
        case ID_40001:
            MessageBox(hwnd, "信息", "我被点击了", MB_OK);
            break;
        default:
            return DefWindowProc(hwnd, uMsg, wParam, lParam);

        }
        break;
        return 0;
    }


    case WM_DESTROY://窗口处理程序
        PostQuitMessage(0);
        return 0;
    case WM_SYSCOMMAND:
        if (wParam == SC_CLOSE)
        {
            int nRet = MessageBox(hwnd, "是否关闭", "infe", MB_YESNO);
            if (nRet == IDYES)
            {
                DestroyWindow(hwnd);
            }
            else
            {
                return 0;
            }
            break;
        }
    default:
        return DefWindowProc(hwnd, uMsg, wParam, lParam);

        return 0;
    }

}

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值