当前位置: 首页 > news >正文

SDK中窗口调用

存在窗口A和B的win32程序 , 当点击窗口A中的按钮后会弹出窗口B

#include <windows.h>

// 窗口 B 的窗口过程
LRESULT CALLBACK WindowProcB(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
    switch (uMsg) {
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hwnd, uMsg, wParam, lParam);
    }
    return 0;
}

// 窗口 A 的窗口过程
LRESULT CALLBACK WindowProcA(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
    switch (uMsg) {
    case WM_COMMAND:
        if (LOWORD(wParam) == 1) { // 按钮 ID 为 1
            // 注册窗口类 B
            WNDCLASS wcB = {};
            wcB.lpfnWndProc = WindowProcB;
            wcB.hInstance = GetModuleHandle(NULL);
            wcB.lpszClassName = L"WindowClassB";
            RegisterClass(&wcB);

            // 创建窗口 B
            HWND hwndB = CreateWindow(wcB.lpszClassName, L"Window B", WS_OVERLAPPEDWINDOW,
                CW_USEDEFAULT, CW_USEDEFAULT, 300, 200, NULL, NULL, GetModuleHandle(NULL), NULL);

            // 显示窗口 B
            ShowWindow(hwndB, SW_SHOW);
            UpdateWindow(hwndB);
        }
        break;
    case WM_CREATE: {
        // 创建按钮
        CreateWindow(L"BUTTON", L"Open Window B", WS_VISIBLE | WS_CHILD,
            10, 10, 120, 30, hwnd, (HMENU)1, GetModuleHandle(NULL), NULL);
        break;
    }
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hwnd, uMsg, wParam, lParam);
    }
    return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    // 注册窗口类 A
    WNDCLASS wcA = {};
    wcA.lpfnWndProc = WindowProcA;
    wcA.hInstance = hInstance;
    wcA.lpszClassName = L"WindowClassA";
    RegisterClass(&wcA);

    // 创建窗口 A
    HWND hwndA = CreateWindow(wcA.lpszClassName, L"Window A", WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, NULL, NULL, hInstance, NULL);

    // 显示窗口 A
    ShowWindow(hwndA, nCmdShow);
    UpdateWindow(hwndA);

    // 消息循环
    MSG msg = {};
    while (GetMessage(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return (int)msg.wParam;
}    

相关文章:

  • 什么是Stop The World
  • Apifox app的用法作用
  • Linux开发工具——apt
  • 从0到神谕:GPT系列的进化狂想曲——用AI之眼见证人类语言的终极形态
  • ffmpeg常见命令3
  • 【力扣hot100题】(054)全排列
  • 【USRP】srsRAN 开源 4G 软件无线电套件
  • Cribl 移除Fields
  • 应对高并发的根本挑战:思维转变【大模型总结】
  • 24信号和槽_自定义槽函数(1)
  • 优选算法的妙思之流:分治——快排专题
  • C++内存管理
  • Windows强制删除任何你想删除的文件和文件夹
  • TypeConverter
  • Linux常用基础命令应用
  • 【问题处理】webpack4升webpack5,报错Uncaught ReferrnceError: process is not defined
  • orangepi zero烧录及SSH联网
  • 打造下一代智能体验:交互型 AI 的崛起与实践
  • 【小沐杂货铺】基于Three.JS绘制太阳系Solar System(GIS 、three.js、WebGL、vue、react)
  • 【Kafka基础】Docker Compose快速部署Kafka单机环境
  • 网站建设微信公众号小程序app/网站seo怎么操作
  • wordpress多人聊天室/宿州百度seo排名软件
  • 企业站/游戏推广员骗局
  • 网站建设公司推/郑州网站推广方案
  • 要学做网站/哪家培训机构好
  • 2016年两学一做教育网站/如何加入百度推广