创建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. Odoo14 groups && rule

    # Odoo14 groups && rule # admin账户以及权限的来源: # admin创建代码在:odoo/odoo/addons/base/data/res_users_ ...

  2. CVI中调用数据库的几点..

    1.各类开发工具开发的程序调用数据库,有两种方式:ADO和ODBC. 2.以ODBC方式访问SQL数据库,必须在电脑管理工具----ODBC管理器 中配置TCP/IP项(IP1.IP2.IP3.IPA ...

  3. Normal3类定义

    法线的相关操作都在图中,实现部分还是大家自己练习,照着图写代码就行了. 类声明: class Normal3 { public: Normal3(); ~Normal3(); Normal3(ldou ...

  4. 源码解析springbatch的job是如何运行的?

    202208-源码解析springbatch的job是如何运行的? 注,本文中的demo代码节选于图书<Spring Batch批处理框架>的配套源代码,并做并适配springboot升级 ...

  5. 【面试题】为什么有时用Vue.use()?及Vue.use()的作用及原理是什么?

    Vue.use()的作用及原理 点击打开视频讲解 在Vue中引入使用第三方库通常我们都会采用import的形式引入进来 但是有的组件在引入之后又做了Vue.use()操作 有的组件引入进来又进行了Vu ...

  6. Redis的两种持久化机制

    Redis的两种持久化机制 1.持久化机制 client--->redis(内存)--->内存数据-数据持久化--->磁盘 两种方法 快照(Snapshot) AOF(Append ...

  7. 一文带你认知定时消息发布RocketMQ

    摘要:DMS任意时间定时消息能力发布. DMS是华为云的分布式消息中间件服务.适用于解决分布式架构中的系统解耦.跨系统跨地域数据流通.分布式事务协调等难题,协助构建优雅的现代化应用架构,提供可兼容 K ...

  8. 关于Redis在windows上运行及fork函数问题

    Redis在将数据库进行持久化操作时,需要fork一个进程,但是windows并不支持fork,导致在持久化操作期间,Redis必须阻塞所有的客户端直至持久化操作完成.微软的一些工程师花费时间在解决在 ...

  9. identity4 系列————持久化配置篇[五]

    前言 上面已经介绍了3个例子了,并且介绍了如何去使用identity. 但是在前面的例子中,我们使用的都是在内存中操作,那么正式上线可能需要持久到数据库中. 这里值得说明的是,并不一定一定要持久化到数 ...

  10. 修改窗体的Title

    直接上代码 /// <summary> /// 获取窗体的名称 /// </summary> /// <param name="hWnd">&l ...