界面编程的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 ;
}
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 ;
case WM_CLOSE:
isContinue = ;
PostQuitMessage();
return ;
case WM_DESTROY:
PostQuitMessage();
return ;
default:
return DefWindowProc(hwnd,msg,wParam,lParam);
}
return ;
} 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, , , , , NULL, NULL, g_hinst, NULL);
if(!hwnd)
return ;
ShowWindow(hwnd, );
UpdateWindow(hwnd);
// 消息循环
MSG msg;
while(GetMessage(&msg,NULL,,)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return TRUE;
} VOID CreatDialogThread() {
dialogThread = CreateThread(NULL, , MyCreateDialog, NULL, , NULL);
}

效果图:

win32 dll工程开发创建对话框的更多相关文章

  1. <转载>Win32控制台工程中创建窗口

    有的时候,用控制台同步输出调试信息.程序状态量,比出Log.弹出报错对话框等方法来得有效.那么如何做到呢?如下: 简而言之,用GetModuleHandle()函数获得当前程序实例句柄,其它地方与常见 ...

  2. Win32 DLL和MFC DLL 中封装对话框

    现在最常看见的关于DLL的问题就是如何在DLL中使用对话框,这是一个很普遍的关于如何在DLL中使用资源的问题.这里我们从Win32   DLL和MFC   DLL两个方面来分析并解决这个问题.     ...

  3. 在Dll中创建对话框并调用

    1.第一步创建一“MFC AppWizard (dll)”工程,接下来选择“Regular Dll using shared MFC DLL”,点击“Finish”. 2.添加一对话框资源到工程中,从 ...

  4. 51开发环境的搭建--KeilC51的安装及工程的创建

    学习单片机的开发,单靠书本的知识是远远不够的,必须实际操作编程才能领会书中的知识点,起到融会贯通的效果.51单片机作为入门级的单片机--上手容易.网上资源丰富.单片机稳定性及资源比较丰富.通过串口即可 ...

  5. WIN32 DLL中使用MFC

    最近用WIN32 DLL,为了方便要用到MFC的一些库,又不想转工程,就网上找了很多方法,发现没有详细的介绍,有的也行不通,现在成功在WIN32 DLL中使用了MFC,记录一下以防以后用到忘记 一.修 ...

  6. 在WIN32 DLL中使用MFC

    最近用WIN32 DLL,为了方便要用到MFC的一些库,又不想转工程,就网上找了很多方法,发现没有详细的介绍,有的也行不通,现在成功在WIN32 DLL中使用了MFC,记录一下以防以后用到忘记 一.修 ...

  7. 架设WIN32汇编程序的开发环境

    笔者在学习Windows下的图形界面应用程序(GUI,Graphical User Interface)的时候碰到的第一个麻烦就是架设WIN32汇编程序的开发环境,在这里笔者愿意和大家分享这段经历. ...

  8. JavaEE开发之SpringBoot工程的创建、运行与配置

    本篇博客我们就来聊一下如何使用Eclipse+STS插件来创建Spring Boot的工程.Spring Boot可以使我们更容易的使用Spring框架,在Spring Boot中自动配置了好多东西, ...

  9. visual studio多工程开发配置

    文章:带你玩转Visual Studio——带你多工程开发 带你玩转Visual Studio——带你理解微软的预编译头技术 通过上一篇文章带你玩转Visual Studio——带你多工程开发的讲解, ...

随机推荐

  1. Matlab与C++混合编程(依赖OpenCV)

    Matlab与C++混合编程实际上就是通过Matlab的Mex工具将C++的代码编译成Matlab支持调用的可执行文件和函数接口.这样一方面可以在Matlab中利用已经编写好的函数,尽管这个函数是用C ...

  2. POJ 3673 Cow Multiplication

    Cow Multiplication Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13312   Accepted: 93 ...

  3. hbmy周赛1--D

    D - Toy Cars Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submi ...

  4. Docker版本升级至17.03

    2017/3/3,Docker官方发表了一篇博客,Docker版本从1.13.*直接跳入17.03,该版本的意思是17年3月.同时,还声明了Docker以后会以CE(Community Edition ...

  5. [20160711][VS2012配置OpenCV2.4.9]

    相关说明 OpenCV是一套开源机器视觉库,用于简化机器视觉算法的开发与调试. 移植环境 操作系统:Win7 64位 移植软件:Visual Studio 2012 代码下载: https://sou ...

  6. css3滤镜Filter使用

    Filter主要用于图片,SVG等元素上,其默认值是none,有以下10个filter-function值可选: grayscale(灰度)效果类似于PS中的去色或者黑白 blur(模糊)效果类似于P ...

  7. 从零开始学习前端开发 — 6、CSS布局模型

    一.css布局模型 1.流动模型(Flow) 元素在不设置css样式时的布局模型,是块元素就独占一行,是内联元素就在一行逐个进行显示 2.浮动模型(Float) 使用float属性来进行网页布局,给元 ...

  8. 【JavaScript_轮播图】

    今天给大家带来的是我自己做的一个轮播图效果,让我们一起来学习一下吧. 这是我的页面所有代码: <!DOCTYPE html> <html> <head> <m ...

  9. 本地apache 可以正常访问,lnmp服务器访问404错误

    if (!-e $request_filename) { rewrite  ^(.*)$  /index.php?s=/$1  last; break; }

  10. Varnish的vcl子程序

    Varnish的VCL子程序 以下内容参考: http://book.varnish-software.com/4.0/ VCL子进程,在其中定制Varnish的行为.VCL子例程可用于:添加自定义标 ...