类class AFX_MODULE_STATE (global data for a module) 一个模块的全局相关数据 可由全局函数AfxGetModuleState()得到

MFC的模块状态:从AfxGetApp()和AFX_MANAGE_STATE()看MFC的模块状态 1.      Introduction当我们在用MFC编程的时候,我们经常用到AfxGetApp()来获得当前的CWinApp的Instance。看看MFC的源代码中AfxGetApp()的实现,你会发现AfxGetApp()的实现并不像一般情况下面那样直接: _AFXWIN_INLINE CWin 阅读详情

```cpp
// MFCTrain101023.cpp : 定义应用程序的类行为。
//

#include "stdafx.h"
#include "MFCTrain101023.h"
#include "MFCTrain101023Dlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CMFCTrain101023App

BEGIN_MESSAGE_MAP(CMFCTrain101023App, CWinApp)
	ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
END_MESSAGE_MAP()


// CMFCTrain101023App 构造

CMFCTrain101023App::CMFCTrain101023App()
{
	// 支持重新启动管理器
	m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;

	// TODO: 在此处添加构造代码,
	// 将所有重要的初始化放置在 InitInstance 中
}


// 唯一的一个 CMFCTrain101023App 对象

CMFCTrain101023App theApp;


// CMFCTrain101023App 初始化

BOOL CMFCTrain101023App::InitInstance()
{
	// 如果一个运行在 Windows XP 上的应用程序清单指定要
	// 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,
	//则需要 InitCommonControlsEx()。否则,将无法创建窗口。
	INITCOMMONCONTROLSEX InitCtrls;
	InitCtrls.dwSize = sizeof(InitCtrls);
	// 将它设置为包括所有要在应用程序中使用的
	// 公共控件类。
	InitCtrls.dwICC = ICC_WIN95_CLASSES;
	InitCommonControlsEx(&InitCtrls);

	CWinApp::InitInstance();


	AfxEnableControlContainer();

	// 创建 shell 管理器,以防对话框包含
	// 任何 shell 树视图控件或 shell 列表视图控件。
	CShellManager *pShellManager = new CShellManager;

	// 标准初始化
	// 如果未使用这些功能并希望减小
	// 最终可执行文件的大小,则应移除下列
	// 不需要的特定初始化例程
	// 更改用于存储设置的注册表项
	// TODO: 应适当修改该字符串,
	// 例如修改为公司或组织名
	SetRegistryKey(_T("应用程序向导生成的本地应用程序"));

	CMFCTrain101023Dlg* pDlg=new CMFCTrain101023Dlg; //在堆中生成对话框对象
	m_pMainWnd=pDlg; //将生成的对话框对象作为应用程序对象的main window成员
	//使用全局函数AfxGetApp()获得当前应用程序对象指针
	CWinApp* pApp=AfxGetApp();
	CMFCTrain101023App* pAppthis=&theApp;
	if(pApp==pAppthis)
		{int istop=0;}
	CWnd* pWnd=pApp->m_pMainWnd;
	if(pWnd==pDlg)
		{int istop=0;}
	//Debugin
	//查看AfxGetMoudleState()->m_pCurrentWinApp;等内容的意义
	//类class AFX_MODULE_STATE (global data for a module) 一个模块的全局相关数据 可由全局函数AfxGetModuleState()得到
	AFX_MODULE_STATE* MYAFXAPI=AfxGetModuleState();
	CWinApp* pCurApp=AfxGetModuleState()->m_pCurrentWinApp; //当前模块所在的应用程序对象的指针
	HINSTANCE hCurInstance=AfxGetModuleState()->m_hCurrentInstanceHandle; //当前实例句柄是个什么?
	HINSTANCE hCurRes=AfxGetModuleState()->m_hCurrentResourceHandle; //当前资源句柄是个什么?和当前实例句柄地址一样
	LPCTSTR CurAppName=AfxGetModuleState()->m_lpszCurrentAppName; //当前应用程序名 "MFCTrain101023"
	BYTE bDll=AfxGetModuleState()->m_bDLL; // TRUE if module is a DLL, FALSE if it is an EXE 0表示当前模块是在EXE而不是某个DLL中
	DWORD fRegisteredClass=AfxGetModuleState()->m_fRegisteredClasses; //flags for registered window classes 0表示不是 当前自定义的窗口类不是注册窗口类

	//Debugout
	INT_PTR nResponse = pDlg->DoModal();
	if (nResponse == IDOK)
	{
		// TODO: 在此放置处理何时用
		//  “确定”来关闭对话框的代码
	}
	else if (nResponse == IDCANCEL)
	{
		// TODO: 在此放置处理何时用
		//  “取消”来关闭对话框的代码
	}

	// 删除上面创建的 shell 管理器。
	if (pShellManager != NULL)
	{
		delete pShellManager;
	}

	// 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,
	//  而不是启动应用程序的消息泵。
	return FALSE;
}

/*
//pDlg->DoModal();的详细语法
INT_PTR CDialog::DoModal()
{
	// can be constructed with a resource template or InitModalIndirect
	ASSERT(m_lpszTemplateName != NULL || m_hDialogTemplate != NULL ||
		m_lpDialogTemplate != NULL);

	// load resource as necessary
	LPCDLGTEMPLATE lpDialogTemplate = m_lpDialogTemplate;
	HGLOBAL hDialogTemplate = m_hDialogTemplate;
	HINSTANCE hInst = AfxGetResourceHandle();
	if (m_lpszTemplateName != NULL)
	{
		hInst = AfxFindResourceHandle(m_lpszTemplateName, RT_DIALOG);
		HRSRC hResource = ::FindResource(hInst, m_lpszTemplateName, RT_DIALOG);
		hDialogTemplate = LoadResource(hInst, hResource);
	}
	if (hDialogTemplate != NULL)
		lpDialogTemplate = (LPCDLGTEMPLATE)LockResource(hDialogTemplate);

	// return -1 in case of failure to load the dialog template resource
	if (lpDialogTemplate == NULL)
		return -1;

	// disable parent (before creating dialog)
	HWND hWndParent = PreModal(); //父窗口
	AfxUnhookWindowCreate();
	BOOL bEnableParent = FALSE;
#ifndef _AFX_NO_OLE_SUPPORT
	CWnd* pMainWnd = NULL;
	BOOL bEnableMainWnd = FALSE;
#endif
	if (hWndParent && hWndParent != ::GetDesktopWindow() && ::IsWindowEnabled(hWndParent)) //父窗口存在且不是桌面窗口且为鼠标和键盘输入启用了该父窗口
	{
		::EnableWindow(hWndParent, FALSE); //禁用向父窗口窗口(或控件)的鼠标和键盘输入
		bEnableParent = TRUE;
#ifndef _AFX_NO_OLE_SUPPORT
		pMainWnd = AfxGetMainWnd(); //调用全局函数{调用全局函数返回当前应用程序线程CWinThread,返回当前应用程序线程的m_pMainWnd窗口指针 }
		if (pMainWnd && pMainWnd->IsFrameWnd() && pMainWnd->IsWindowEnabled()) //当前窗口存在且是框架窗口且为鼠标和键盘输入启用了该窗口
		{
			//
			// We are hosted by non-MFC container
			// 
			pMainWnd->EnableWindow(FALSE); //启用向当前窗口(或控件)的鼠标和键盘输入
			bEnableMainWnd = TRUE;
		}
#endif
	}

	TRY
	{
		// create modeless dialog
		AfxHookWindowCreate(this);
		if (CreateDlgIndirect(lpDialogTemplate,
						CWnd::FromHandle(hWndParent), hInst))
		{
			if (m_nFlags & WF_CONTINUEMODAL)
			{
				// enter modal loop
				DWORD dwFlags = MLF_SHOWONIDLE;
				if (GetStyle() & DS_NOIDLEMSG)
					dwFlags |= MLF_NOIDLEMSG;
				VERIFY(RunModalLoop(dwFlags) == m_nModalResult);
			}

			// hide the window before enabling the parent, etc. 在启用父窗口前隐藏该窗口
			if (m_hWnd != NULL)
				SetWindowPos(NULL, 0, 0, 0, 0, SWP_HIDEWINDOW|
					SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOZORDER);
		}
	}
	CATCH_ALL(e)
	{
		DELETE_EXCEPTION(e);
		m_nModalResult = -1;
	}
	END_CATCH_ALL

#ifndef _AFX_NO_OLE_SUPPORT
	if (bEnableMainWnd)
		pMainWnd->EnableWindow(TRUE); //启用向当前窗口(或控件)的鼠标和键盘输入
#endif
	if (bEnableParent)
		::EnableWindow(hWndParent, TRUE); //启用向父窗口(或控件)的鼠标和键盘输入
	if (hWndParent != NULL && ::GetActiveWindow() == m_hWnd)
		::SetActiveWindow(hWndParent); //该SetActiveWindow函数激活一个窗口,但如果应用程序是在后台。当系统激活窗口时,如果其应用程序位于前台,则该窗口将被置于前台(Z-Order的顶部)

	// destroy modal window
	DestroyWindow(); //销毁Modal模式窗口
	PostModal(); //Modal模式窗口后处理

	// unlock/free resources as necessary
	if (m_lpszTemplateName != NULL || m_hDialogTemplate != NULL)
		UnlockResource(hDialogTemplate);
	if (m_lpszTemplateName != NULL)
		FreeResource(hDialogTemplate);

	return m_nModalResult;
}
*/

LightGBM之LGBMRegressor()参数详解以及调参 LightGBMLight Gradient Boosting Machine)是一种梯度提升框架,它使用决策树作为基学习器。LightGBM 可以说是在 XGBoost 上做的优化。LightGBM 为高效并行计算而生,它的 Light 体现在以下几个点上:更快的训练速度更低的内存使用支持单机多线程,多机并行计算,以及 GPU 训练能够处理大规模数据。 阅读详情

相关推荐

第三节: 串口通信(用CubeMX学习STM32)

用CubeMX学习STM32, 串口通信学习, 通过轮询方式和中断方式两种方式进行通信演示。 STM32F407zgt6

Kevin_8_Lee的博客 8904

AfxGetModuleState() 与 AfxGetModuleThreadState()

http://blog.pfan.cn/sword2008/29453.htmlhttp://blog.pfan.cn/sword2008/29453.html AfxGetModuleState()可以获得与执行线程关联的AFX_MODULE_STATE,而AfxGetModuleThreadState()可以获得与执行线程关联的AFX_MODULE_STATE与当前执行线程关联的A

csw_100的专栏 8766

避开生产计划大坑:不懂MPS和MRP的区别,你的SAP PP模块白学了

本文深入解析SAP PP模块中MPS(主生产计划)与MRP(物料需求计划)的核心区别,揭示如何通过正确配置避免生产计划中的常见陷阱。文章详细探讨了MPS的三大缓冲特性和动态平衡算法,帮助企业提升生产计划稳定性,优化资源配置,避免生产线波动。

weixin_29268267的博客 401

Module State

4. Module State Module State保存着和Module相关的状态信息。Module是Windows的术语,代表任何一个可执行的代码文件, EXE和DLL都是Module的一种。Module State有下面几种: 1.     AFX_MODULE_STATE,保存MODULE的信息,是_AFX_BASE_MODULE_STATE和_AFX_DLL_MODULE_STAT

qq_36706984的博客 1482

VLSI数字信号处理系统——第九章滤波器和变换中的算法强度缩减

[课程学习] VLSI数字信号处理系统——第九章滤波器和变换中的算法强度缩减

夏风喃喃的博客 1604

经典脉冲激光测距原理&雷达方程

脉冲激光测距机的工作过程如下:首先用瞄准光学系统瞄准目标,然后接通激光电源,储能电容器充电,产生触发闪光灯的触发脉冲,闪光灯点亮,激光器受激辐射,从输出反射镜发射出一个前沿陡峭、峰值功率高的激光脉冲,通过发射光学系统压缩光束发射角后射向目标。通过计算激光发射功率经介质传输的衰减,目标表面截获和反射的光功率,到达接收视场的光功率,以及接收光学系统接收到的光功率,就可以得到到达光电探测器的光功率,即接收功率。⑤光東路程上的折射率变化;),测量光脉冲到达目标并由目标返回到接收机的时间,由此计算出目标的距离。

weixin_46153372的博客 2521

AFX_MODULE_STATE作用

MFC定义了多种状态信息,这里要介绍的是模块状态、进程状态、线程状态。这些状态可以组合在一起,例如MFC句柄映射就是模块和线程局部有效的,属于模块-线程状态的一部分。 模块状态 这里模块的含义是:一个可执行的程序或者一个使用MFC DLL的DLL,比如一个OLE控件就是一个模块。 一个应用程序的每一个模块都有一个状态,模块状态包括这样一些信息:用来加载资源的 Windows实例句柄、指向当前CW...

guniwi的博客 2297

服务器能效测试工具BenchSEE使用方法简介

BenchSEE是由中国标准化研究院开发的一款针对服务器产品能效测试的基准软件。BenchSEE基准的设计参考了全球众多服务器厂家、芯片厂家、能效认证机构和IT节能领域科研机构的意见,旨在满足服务器市场应用对能效测评的需求。BenchSEE基准负载工具支持的服务器类型包括:机架服务器、刀片服务器多节点服务器和机柜服务器等,服务器可以配的最大外理器个数包括:1P,2P和4P等。测试基准涵盖服务器关键部件:CPU,内存和存储介质三大基础部件。

MQWYY3的博客 4216

AFX_MODULE_STATE

  AFX_MODULE_STATE 1: // AFX_MODULE_STATE (global data for a module) 2: class AFX_MODULE_STATE : public CNoTrackObject 3: { 4: public: 5: #ifdef _AFXDLL

我思故我在 欲速则不达 6210

STM32家电安全开发实战:手把手教你用X-CUBE-CLASSB通过IEC60730 Class B认证

本文详细解析了如何使用STM32的X-CUBE-CLASSB软件包通过IEC60730 Class B认证,涵盖认证核心要求、软件包架构、工程集成配置及调试技巧。针对家电安全开发,提供了从单元测试到压力测试的全流程方案,帮助开发者快速实现符合国际安全标准的嵌入式控制系统。

pink的博客 704

24. 在QML界面中嵌入QWidget窗口

目前QT官方主推的界面开发方式是采用QML进行界面设计,但在QML未流行之前,很多的项目都是采用QWidget开发的,把之前的代码全部转换为QML代码显然工作量非常大,如果能将QWidget窗口嵌入到QML界面中,那么开发效率将提高很多,且QML无法实现的功能也能借助于QWidget框架进行实现。

山间点烟雨 5921

从AFX_MANAGE_STATE(AfxGetStaticModuleState())说起

以前写MFC的DLL的时候,总会在自动生成的代码框架里看到提示,需要在每一个输出的函数开始添加上AFX_MANAGE_STATE(AfxGetStaticModuleState())。一直不明白这样做的含义,也一直没有这样做,而且代码也工作得好好的,所以感觉这好像一句废话。最近的项目中,需要在DLL里使用MFC生成界面,这才发现一旦资源放在不同的动态库里,而且还和多线程搅和在一起的时候,事情就变得

optman的专栏 2万+

基于Verilog的8位CPU设计及UART扩展实现方案,包含完整的架构设计、核心代码实现和仿真验证方法

基于Verilog的8位CPU设计及UART扩展实现方案,包含完整的架构设计、核心代码实现和仿真验证方法

a_zxswer的博客 190

深入解析MFC -- CWinApp

一个Windows应用程序至少由两部分组成:消息处理和窗口过程。在MFC中,由CWinApp和CWnd来分别处理这些操作。 CWinApp负责初始化,创建一个或多个窗口。CWinApp由CWinThread派生。CWinThread的成员函数Run,维护GetMessage() ... DispatchMessage()等消息循环。 每个MFC模块都必须写一个类CYourApp,这个类从CWi

bytxl的专栏 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

AFX_MANAGE_STATE(AfxGetStaticModuleState())的一次旅行~

AFX_MANAGE_STATE(AfxGetStaticModuleState()); 宏定义如下#define AFX_MANAGE_STATE_NO_INIT_MANAGED(p) AFX_MAINTAIN_STATE2 _ctlState(p);#defineAFX_MA

绝迹·危言的专栏 3092

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

AFX_MANAGE_STATE(AfxGetStaticModuleState())

AFX_MANAGE_STATE(AfxGetStaticModuleState())   AFX_MANAGE_STATE(AfxGetStaticModuleState());//用于模块切换时的状态保护, 1.AfxGetStaticModuleState()指向当前模块状态; 2.当前函数调用结束后原模块的状态自动被恢复; 3.用于DLL中所调用MFC函数、类...

weixin_34326429的博客 249

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

MFC内部运行来龙去脉追踪

mfc内部运行线路

keyouan2008的专栏 917

MFC第一天

要求: 1.连续性极强,不要缺课。 2.紧跟思路 3.营造良好的课堂气氛。 掌握的技能: 1.熟练使用断点调试程序。 2.学习使用CALL STACK查看函数的调用关系。 3.熟练使用各种向导。生成向导,类向导。 4.借助MSDN 课程大体安排: 1.MFC 框架原理和应用 2.COM--组件的编程原理和应用《超难》 3.SOCKET-套接字-WINDOWS平台下的网络编程

车晋强的专栏 604

MFC全局函数开局——AfxGetApp解剖

AfxGetApp( )这个函数可以得到当前应用进程的指针,是CWinApp*类型的,通过这个指针可以访问到这个进程中的对象。 函数原型: CWinApp*AFXAPI AfxGetApp(); 返回值: A pointer to the single CWinApp object for the application. 返回指向应用程序的单一的CWinApp对象的指针。 注

thanklife的专栏 1484

AFX模块状态

_AFX_THREAD_STATE { AFX_MODULE_STATE* m_pModuleState; AFX_MODULE_STATE* m_PreModuleState; } 线程状态类 AFX_MODULE_STATE { CWinApp* m_pCurentWinApp; HINSTANCE m_hCurrentInstanceHa...

weixin_33709364的博客 256

MFC 模块状态的实现

<br />本技术备忘录介绍MFC “模块状态”结构的实现。充分理解模块状态这个概念对于在DLL中使用MFC的共享动态库是十分重要的。<br />MFC的状态信息分为三种:全局模块状态数据、进程局部状态数据和线程局部状态数据。有时这些数据类型之间没有严格界限,例如MFC的句柄表既是全局模块状态数据也属于线程局部状态数据。<br />进程局部状态数据和线程局部状态数据差不多。早先这些数据是全局的,但是为了更好的支持Win32和多线程,现在设计成进程或者线程相关的。模块状态数据既可以包含真正的全局状态数据,也可

playStudy的专栏 3714

AfxGetApp()解析

。解析AfxGetApp()函数 本文是学习深入浅出MFC后的第一个笔记,解析AfxGetApp()函数 在AFXWIN.H中是这么定义的:     CWinApp* AFXAPI AfxGetApp(); 那么AfxGetApp是怎么获取当前App的CWinApp类指针呢? AfxGetApp是一个内联函数,其实现如下(在AFXWIN1.INL):      _AFXWIN_INLI

yaxf999的专栏 3271

在DLL中使用资源

2.MFC DLL 在MFC DLL中使用对话框不像Win32 DLL中那么简单,主要是因为MFC程序中存在一个模块状态(Module State)的问题,也就是资源重复的问题。(此处的术语模块是指一个可执行程序,或指其操作不依赖于应用程序的其余部分但使用MFC运行库的共享副本的一个DLL(或一组DLL)。我们所创建的MFC DLL就是这种模块的一个典型实例。) 在每个模块(EXE或DLL)中,都

唐昊的专栏 1038

如何在mfc dll中加入dllmain

    通过向导创建一个带有mfc的dll,你会发现没有dllmain。那么如何使用dllmain的呢。请看下面解说。引用的是ms:http://support.microsoft.com/kb/q148791/通过设计,MFC 常规 dll 具有由 MFC 自动提供一个默认 DllMain 函数。规则 dll 不应提供自己 DllMain。 任何初始化,这是必需的 DLL 加载时应进行

Tommy(凌飞)的专栏 6675
上一篇: 关联容器set map与顺序容器vector的元素层面字典序排序
下一篇: Windows各种内置消息
HayPinF
博客等级 码龄9年 175粉丝 140原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值