implement_dynamic(VC++)DECLARE_DYNAMIC(CDrawToolDlg)这个是什么意思?
implement_dynamic  时间:2021-06-14  阅读:(
)
 
 
求高手帮忙详细解说下这代码吧。。小生是初学者。万分感谢了
IMPLEMENT_DYNAMIC(CMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
 //{{AFX_MSG_MAP(CMainFrame)
  // NOTE - the ClassWizard will add and remove mapping macros here.
  //    DO NOT EDIT what you see in these blocks of generated code !
 ON_WM_CREATE()
 ON_WM_SETFOCUS()
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()
//消息映射,将相应的消息绑定相应的函数,类似于委托(c#中的),函数指针
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
 if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  return -1;
 // create a view to upy the client area of the frame
 if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW,
  CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL))
 {
  TRACE0("Failed to create view window
");
  return -1;
 }
//创建视图,也就是view
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
 if ( cs.hMenu != NULL )
 {
  DestroyMenu( cs.hMenu );
  cs.hMenu = NULL;
 }
//在窗口创建前做的一些初始化工作,如果菜单句柄不为空,就释放菜单句柄
void CMainFrame::AssertValid() const
{
 CFrameWnd::AssertValid();
}
void CMainFrame::Dump(CDumpContext& dc) const
{
 CFrameWnd::Dump(dc);
}
//上面两个函数是debug模式下的断言,不用管
void CMainFrame::OnSetFocus(CWnd* pOldWnd)
{
 UNREFERENCED_PARAMETER( pOldWnd );
 m_wndView.SetFocus();
}
//设置视图焦点
BOOL CMainFrame::OnCmdMs(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
{
 if (m_wndView.OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
  return TRUE;
 return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}
//处理系统命令消息在vs 2005里面如何像6里面添加CSplashWnd组件来设置启动菜单呢
我告诉你在vs2008下的做法。
项目-添加类-c++类,类名CSplashWnd
其他默认。
把SplashWnd.h的代码如下:
#pragma once
// CSplashWnd
class CSplashWnd : public CWnd
{
 DECLARE_DYNAMIC(CSplashWnd)
private: 
 CDC mMemDC; 
 BITMAP bmBitmap; 
 CBitmap m_Bitmap; 
 CBitmap *Old_Bitmap; 
public: 
 void CreateSplash(); 
public:
 CSplashWnd();
 virtual ~CSplashWnd();
protected:
 afx_msg void OnPaint(); 
 DECLARE_MESSAGE_MAP()
};
类的cpp代码:
// SplasWnd.cpp : 实现文件
//
#include "stdafx.h"
#include "resource.h"
#include "SplashWnd.h"
// CSplashWnd
IMPLEMENT_DYNAMIC(CSplashWnd, CWnd)
CSplashWnd::CSplashWnd()
{
 m_Bitmap.LoadBitmap(MAKEINTRESOURCE(IDB_BITMAP1)); //Load Bitmap 
 m_Bitmap.GetBitmap(&bmBitmap); //Get Bitmap Info 
}
CSplashWnd::~CSplashWnd()
{
}
BEGIN_MESSAGE_MAP(CSplashWnd, CWnd)
 ON_WM_PAINT() 
END_MESSAGE_MAP()
// CSplashWnd 消息处理程序
void CSplashWnd::CreateSplash() 
{ 
 //Create Splash Window 
 CWnd::CreateEx(0, 
 AfxRegisterWndClass( 
 0, 
 AfxGetApp()->LoadStandardCursor(IDC_UPARROW)), 
 NULL, 
 // "SplashWindow Sample", 
 WS_POPUP, 
 0, 
 0, 
 bmBitmap.bmWidth, //Bitmap Width = Splash Window Width 
 bmBitmap.bmHeight, //Bitmap Height = Splash Window Height 
 NULL, 
 NULL, 
 NULL); 
} 
void CSplashWnd::OnPaint() 
{ 
 CPaintDC dc(this); 
 CBrush brush; 
 brush.CreateSolidBrush(RGB(64,64,255)); 
 dc.SelectObject(&brush); 
 dc.Rectangle(0,0,bmBitmap.bmWidth,bmBitmap.bmHeight); 
 mMemDC.CreateCompatibleDC(NULL); //Create Memory DC 
 Old_Bitmap = mMemDC.SelectObject(&m_Bitmap); //Select DC 
 int num = bmBitmap.bmWidth/40; 
 dc.StretchBlt(0,0,bmBitmap.bmWidth,bmBitmap.bmHeight,&mMemDC,0,0,bmBitmap.bmWidth,bmBitmap.bmHeight,SRCCOPY); 
 mMemDC.SelectObject(Old_Bitmap); //Select Bitmap 
} 
//IDB_BITMAP1是添加的位图资源。
然后在MainFrm.cpp中OnCreate函数开始处
m_pSplashWindow = new CSplashWnd();
// CRect rect(10,10,500,500);
// m_pSplashWindow->Create(NULL,NULL,0,rect,NULL,0);
 m_pSplashWindow->CreateSplash(); 
 m_pSplashWindow->CenterWindow(); 
 m_pSplashWindow->ShowWindow(SW_SHOW);
 m_pSplashWindow->UpdateWindow(); 
// Sleep(2000);
 m_pSplashWindow->DestroyWindow();
//m_pSplashWindow 要在头文件中声明,并要在析构函数中delete。
不过这破程序没必要,不知道自己当时为什么要这样写,动态内存使用麻烦容易出错,直接在这个函数中构造对象就可以了,不用什么动态申请,也就不用在头文件中声明什么指针了。
自己懒得改,你觉得有必要就改下吧mfc为什么一个类要派生出很多类???请说清楚点
其实很简单,比如说一个画笔类,所谓术业有专攻,铅笔类和钢笔类的功能是不一样的,使用场景也不一样。
所以MFC派生出来的类非常庞大,目的就在于不需要程序员去做重复性开发的工作,而是选择适合自己的工具。
(VC++)DECLARE_DYNAMIC(CDrawToolDlg)这个是什么意思?
这个是VC的宏,一般不常遇到. 
从CObject派生一个类时,此宏增加关于一个对象类的访问运行时间功能。
把DECLARE_DYNAMIC宏加入类的头文件中,然后在全部需要访问词类对象的.CPP文件中都包含此模块。
如果像所描述那样使用DELCARE_DYNAMIC和IMPLEMENT_DYNAMIC宏,那么用户便可使用RUNTIME_CLASS宏和CObject::IsKindOf函数以在运行时间决定对象类。
如果DECLARE_DYNAMIC包含在类定义中,那么IMPLEMETN_DYNAMIC必须包含在类工具中。
 
		  
		  
		  - implement_dynamic(VC++)DECLARE_DYNAMIC(CDrawToolDlg)这个是什么意思?相关文档
 
		  		  
		      
			  
		  
			  			   
			      
			        
			          
			          触摸云国内IDC/ISP资质齐全商家,与香港公司联合运营, 已超8年运营 。本次为大家带来的是双12特惠活动,美国高防|美国大宽带买就可申请配置升档一级[CPU内存宽带流量选一]升档方式:CPU内存宽带流量任选其一,工单申请免费升级一档珠海触摸云科技有限公司官方网站:https://cmzi.com/可新购免费升档配置套餐:地区CPU内存带宽数据盘价格购买地址美国高防 1核 1G10M20G 26...
			         
			       
				  
			     
							   
			      
			        
			          
			          如今我们很多朋友做网站都比较多的采用站群模式,但是用站群模式我们很多人都知道要拆分到不同IP段。比如我们会选择不同的服务商,不同的机房,至少和我们每个服务器的IP地址差异化。于是,我们很多朋友会选择美国多IP站群VPS商家的产品。美国站群VPS主机商和我们普通的云服务器、VPS还是有区别的,比如站群服务器的IP分布情况,配置技术难度,以及我们成本是比普通的高,商家选择要靠谱的。我们在选择美国多IP...
			         
			       
				  
			     
							   
			      
			        
			          
			          HostMem近日发布了最新的优惠消息,全场云服务器产品一律75折优惠,美国洛杉矶QuadraNet机房,基于KVM虚拟架构,2核心2G内存240G SSD固态硬盘100Mbps带宽4TB流量,27美元/年,线路方面电信CN2 GT,联通CU移动CM,有需要美国大硬盘VPS云服务器的朋友可以关注一下。HostMem怎么样?HostMem服务器好不好?HostMem值不值得购买?HostMem是一家...
			         
			       
				  
			     
							
			   
			   
implement_dynamic为你推荐
	dnf装备代码dnf超级装备 ,极品代码是什么意思?求教!刷ip流量一天可以刷一万IP流量的软件5e5e5e如何更改bootstrap navbar的颜色 03 Topics 03 Ruby Chinashoujiao黑鲨手机SKW一AO怎么解锁?微信如何只发文字微信朋友圈如何只发文字,怎么发文字不要图databasenamefoxpro中的的命令格式腾讯合作伙伴大会如何成为腾讯渠道合作伙伴?特斯拉model3降价特斯拉model 3中国有补贴吗在线沟通什么是在线状态?flash序列号急求flash序列号
拜登买域名批特朗普 pccw googleapps 海外服务器 免费ftp空间申请 亚马逊香港官网 河南移动m值兑换 域名dns 腾讯总部在哪 阿里云免费邮箱 新加坡空间 贵阳电信测速 cdn网站加速 万网主机 电信宽带测速软件 卡巴斯基试用版下载 云销售系统 碳云 建站技术 时间服务器 更多