创建MFC图形界面dll

概述:

利用MFC的DLL框架,制作带有图形界面的dll,可以实现很多功能。

流程:

选择静态链接MFC DLL:以免有的库没有。

采用该框架创建的MFC,会自动生产一个MFC应用程序实例,但是我们还要添加一个图形界面,不然为啥不直接用DLL,而用MFC的DLL呢。

添加对话框:

右键项目,然后添加对话框资源:

右键该对话框给其添加一个类,不然的话只是一个界面,没有真正的引用它。

输入类名会自动生成相关文件:

注:这里如果添加类时,采用的是CDialogEx作为基类,需要在对应的对话框头文件中添加"afxdialogex.h头文件,因为VS不会自动添加。"

在MFC主函数中使用对话框:

MFC的正常框架是只有一个theApp。

前面我们创建了对话框类,但是还没有调用它,所以需要在MFC的theApp中调用该对话框。

在项目中对应的MfcDllTest1.cpp中添加以下代码:

#include"MfcTestDialog.h"


//使用对话框:
MfcTestDialog* pMfcTestDialog = NULL;
DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
if (!pMfcTestDialog)
pMfcTestDialog = new MfcTestDialog();
pMfcTestDialog->DoModal();
delete(pMfcTestDialog);
FreeLibraryAndExitThread(theApp.m_hInstance, 0X0);
}
BOOL CMfcDllTest1App::InitInstance()
{
CWinApp::InitInstance();
::CreateThread(NULL, NULL, ThreadProc, NULL, NULL, NULL);//新添加
return TRUE;
}

解释一下这几行代码的原因:

在InitInstance()中创建线程是以免dll中创建模态对话框卡住。

MfcTestDialog* pMfcTestDialog = NULL;//创建类实例变量
DWORD WINAPI ThreadProc(LPVOID lpParameter)//线程函数
{
   if (!pMfcTestDialog)
       pMfcTestDialog = new MfcTestDialog();
   pMfcTestDialog->DoModal();//调用模态对话框
   delete(pMfcTestDialog);//关闭对话框后,删除该变量
   FreeLibraryAndExitThread(theApp.m_hInstance, 0X0);//删除该dll模块,并退出线程
}

测试代码:

生成dll后,随便注入到一个进程中查看是否有对话框生成。

(注:这里我生成的是x64的dll,需要注入到x64进程)

这里我注入到了windows的记事本进程中:

结果和我们预期一样。

MFC-创建MFC图形界面dll的更多相关文章

  1. 第六次作业——利用MFC实现计算器图形界面以及简单四则运算表达式批处理

    参考资料:      1.MFC响应键盘      2.计算器实例      3.MFC文件对话框      4.MFCUpdateData()函数的使用      5.MFC教程      6.wi ...

  2. 创建Win32图形界面应用程序

    没有什么比创建一个Win32图形界面应用程序能让Win32汇编初学者更兴奋的了! 然而,对于像我这样没有代码便会陷入困境的人来说,看到下面的代码总能让人为之一振,百余行的代码使得Win32GUI编程并 ...

  3. FFmpeg再学习 -- FFmpeg+SDL+MFC实现图形界面视频播放器

    继续看雷霄骅的 课程资料 - 基于FFmpeg+SDL的视频播放器的制作最后一篇,主要是想学一下 MFC 创建和配置. 一.创建 MFC 工程 文件->新建->项目->Visual ...

  4. 学习MFC创建界面

    原始学习文章地址: http://blog.csdn.net/chenyusiyuan/article/details/4744097 一.创建MFC 首先创建一个MFC对话框应用程序(Dialog- ...

  5. 结对项目——图形界面实现与dll动态链接

    先来一发软件截图~~~ 生成题目的界面 测评界面 第三块本来准备做一个文件历史记录的界面,但是由于时间不够,暂时还没做完. 图形界面的设计与实现 由于对传统的对话框风格不太满意,所以这次作业的图形界面 ...

  6. [ActiveX]使用VS2010创建MFC ActiveX工程项目

    ActiveX的基本概念 ActiveX控件可以看作是一个极小的服务器应用程序,它不能队列运行,必须嵌入到某个容器程序中,与该容器一起运行.这个容器包括web网页,应用程序窗体等等. ActiveX控 ...

  7. C++ 使用VS2010创建MFC ActiveX工程项目

    1.ActiveX的基本概念 ActiveX控件可以看作是一个极小的服务器应用程序,它不能独立运行,必须嵌入到某个容器程序中,与该容器一起运行.这个容器包括WEB网页,应用程序窗体等... Activ ...

  8. c++ ActiveX基础1:使用VS2010创建MFC ActiveX工程项目

    1.ActiveX的基本概念 ActiveX控件可以看作是一个极小的服务器应用程序,它不能独立运行,必须嵌入到某个容器程序中,与该容器一起运行.这个容器包括WEB网页,应用程序窗体等... Activ ...

  9. 【VS开发】使用VS2010创建MFC ActiveX工程项目

    1.ActiveX的基本概念 ActiveX控件可以看作是一个极小的服务器应用程序,它不能独立运行,必须嵌入到某个容器程序中,与该容器一起运行.这个容器包括WEB网页,应用程序窗体等... Activ ...

随机推荐

  1. php和js的不定参

    function my_func() { $args = func_get_args(); print_r($args); } my_func('php','java','node.js'); jav ...

  2. show create table底层流程跟踪

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 导语 SHOW CREATE TABLE语句用于为指定表/视图显示创建的语句,本文将简要描述如何在MySQL源码里跟踪和学 ...

  3. 手把手教你分析MySQL查询性能瓶颈,包教包会

    当一条SQL执行较慢,需要分析性能瓶颈,到底慢在哪? 我们一般会使用Explain查看其执行计划,从执行计划中得知这条SQL有没有使用索引?使用了哪个索引? 但是执行计划显示内容不够详细,如果显示用到 ...

  4. 腾讯云服务器安装rabbitmq及简单测试记录

    一.安装 近期对消息队列的学习让我对消息中间件产生了兴趣,而作为消息队列的使用的rabbitmq,就是我学习中间件的第一步. rabbitmq和erlang的安装 安装之前先检查环境: [root@V ...

  5. 使用dotnet-monitor分析在Kubernetes的应用程序:Sidecar模式

    dotnet-monitor可以在Kubernetes中作为Sidecar运行,Sidecar是一个容器,它与应用程序在同一个Pod中运行,利用Sidecar模式使我们可以诊断及监控应用程序. 如下图 ...

  6. Docker 拉取Nginx镜像 和运行

    Docker 镜像拉取 docker pull [OPTIONS] NAME[:TAG|@DIGEST] 镜像拉取命令 OPTIONS说明: -a :拉取所有 tagged 镜像 --disable- ...

  7. 【java】学习路线6-静态方法、私有化方法、父类子类

    import java.util.Arrays; /* 我们可以自己创建方法(静态) 私有化方法,阻止他人实例化该方法 静态代码块只执行一次,只在加载这个所在类的时候执行 父类 - 子类 子类继承自父 ...

  8. js实现多条件排序

    1.sort排序允许接受一个参数(函数),这个函数接受2个形参a,b,并且通过冒泡的方式比较.例子:Arr.sort((a,b) => a-b);   升序排列Arr.sort((a,b) =& ...

  9. Docker 完整版教程

    Docker 安装 一.安装前必读 在安装 Docker 之前,先说一下配置,我这里是Centos7 Linux 内核:官方建议 3.10 以上,3.8以上貌似也可. 注意:本文的命令使用的是 roo ...

  10. 当web项目没有配置<welcome-file>index_1.jsp</welcome-file>默认标签启动tomcat后默认访问的页面是什么呢?

    当web项目没有配置index_1.jsp默认标签启动tomcat后默认访问的页面是什么呢? 结果我启动后居然默认打开了index.jsp页面 为什么呢?为什么会访问我的.indexjsp页面呢?不是 ...