zoukankan      html  css  js  c++  java
  • win32 dll工程开发创建对话框

    界面编程的CreateWindow函数需要instance,只要获取到dll工程的main的instance参数,就可以使用CreateWindow函数了。


    创建对话框需要CreateDialog函数。这个函数需要获取对话框的界面资源。

    所以需要先添加资源。


    右键项目选择添加资源,选择IDD_FORMVIEW

    之后会出现界面样式编辑页面,首先一个空白的对话框。

    你可以选择在上边添加按钮。选择vs的视图菜单,点击工具箱,之后拖动控件添加按钮即可。

    之后编译的话会出现错误。RC(8): error RC2144: PRIMARY LANGUAGE ID not a number

    解决办法:在在resource.h中加入#include <winresrc.h>


    C++部分代码:

    (按钮响应在DlgProc函数里写,按钮IDC_BUTTON1等都是资源文件里定义的。)

    // 处理对话框消息  
    INT_PTR CALLBACK DlgProc(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam)  
    {  
        switch (msg)  
        {  
        case WM_COMMAND:  
            {  
                switch(LOWORD(wParam))  {  
                case IDC_BUTTON1:  
                    MessageBox(hdlg, L"您点击了第一个按钮。", L"提示", MB_OK | MB_ICONINFORMATION);  
                    break;  
                case IDC_BUTTON2:  
                    MessageBox(hdlg, L"您点击了第二个按钮。", L"提示", MB_OK | MB_ICONINFORMATION);  
                    break;  
                default:  
                    break;  
                }  
            }  
            return 0;  
        }  
        return (INT_PTR)FALSE;  
    } 
    
    LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)  {  
        switch (msg)  {  
        case WM_CREATE:  
            {  
                // 创建对话框  
                HWND hdlg = CreateDialog(g_hinst, MAKEINTRESOURCE(IDD_FORMVIEW), hwnd, (DLGPROC)DlgProc);  
                // 显示对话框  
                ShowWindow(hdlg, SW_SHOWNA);  
            }  
            return 0;  
        case WM_CLOSE:
            isContinue = 1;
            PostQuitMessage(0); 
            return 0;
        case WM_DESTROY:  
            PostQuitMessage(0);  
            return 0;  
        default:  
            return DefWindowProc(hwnd,msg,wParam,lParam);  
        }  
        return 0;  
    }  
    
    DWORD WINAPI  MyCreateDialog(LPVOID lpParamter) {
        // 设计窗口类  
        WNDCLASS wc = { };  
        wc.hbrBackground = (HBRUSH)COLOR_WINDOW;  
        wc.lpfnWndProc = (WNDPROC)WindowProc;  
        wc.lpszClassName = L"supper_man";  
        wc.hInstance = g_hinst;  
        wc.style = CS_HREDRAW | CS_VREDRAW;  
        RegisterClass(&wc);   
        // 创建窗口  
        HWND hwnd = CreateWindow(L"supper_man", L"证书导入",   
            WS_OVERLAPPEDWINDOW, 40, 25, 380, 300, NULL, NULL, g_hinst, NULL);  
        if(!hwnd)  
            return 0;  
        ShowWindow(hwnd, 5);  
        UpdateWindow(hwnd);  
        // 消息循环  
        MSG msg;  
        while(GetMessage(&msg,NULL,0,0))  {  
            TranslateMessage(&msg);  
            DispatchMessage(&msg);  
        }  
        return TRUE;
    }
    
    
    VOID CreatDialogThread() {
        dialogThread = CreateThread(NULL, 0, MyCreateDialog, NULL, 0, NULL);
    }

    效果图:

  • 相关阅读:
    java hashmap 缓存
    android 界面刷新 post send
    android 五种 布局文件
    通过枚举窗口,实现最小化到托盘中程序的窗口显示
    转 String,CString,TCHAR*,char*之间区别和联系
    标准C++ 时间日期函数
    话说程序员的职业生涯
    李开复:创业必备
    职业化的软件工程师
    让高版本ie兼容低版本
  • 原文地址:https://www.cnblogs.com/rixiang/p/6946098.html
Copyright © 2011-2022 走看看