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)这个是什么意思?相关文档

百纵科技(19元/月),美国洛杉矶10G防御服务器/洛杉矶C3机房 带金盾高防

百纵科技官网:https://www.baizon.cn/百纵科技:美国云服务器活动重磅来袭,洛杉矶C3机房 带金盾高防,会员后台可自助管理防火墙,添加黑白名单 CC策略开启低中高.CPU全系列E52680v3 DDR4内存 三星固态盘列阵。另有高防清洗!美国洛杉矶 CN2 云服务器CPU内存带宽数据盘防御价格1H1G10M10G10G19元/月 购买地址2H1G10M10G10G29元/月 购买...

PacificRack 下架旧款方案 续费涨价 谨慎自动续费

前几天看到网友反馈到PacificRack商家关于处理问题的工单速度慢,于是也有后台提交个工单问问,没有得到答复导致工单自动停止,不清楚商家最近在调整什么。而且看到有网友反馈到,PacificRack 商家的之前年付低价套餐全部下架,而且如果到期续费的话账单中的产品价格会涨价不少。所以,如果我们有需要续费产品的话,谨慎选择。1、特价产品下架我们看到他们的所有原来发布的特价方案均已下架。如果我们已有...

Puaex:香港vds,wtt套餐,G口带宽不限流量;可解流媒体,限量补货

puaex怎么样?puaex是一家去年成立的国人商家,本站也分享过几次,他家主要销售香港商宽的套餐,给的全部为G口带宽,而且是不限流量的,目前有WTT和HKBN两种线路的方面,虽然商家的价格比较贵,但是每次补一些货,就会被抢空,之前一直都是断货的状态,目前商家进行了补货,有需要这种类型机器的朋友可以入手。点击进入:puaex商家官方网站Puaex香港vds套餐:全部为KVM虚拟架构,G口的带宽,可...

implement_dynamic为你推荐
absolute居中绝对定位的div,怎样才能让它随浏览器自动左右居中啊?最好给我能运行的例子。时间刻度Microsoft Project 时间刻度怎么更改订房系统酒店管理系统包括哪些子系统renderpartialreact里面使隐藏的组件显示出来是addclass还是render公众号付费阅读怎么利用公众号做知识付费?无处不在的意思人山无处不花枝的意思是什么broadcast播哈尔滨哪里有卖broadcast播 这个服装品牌的5e5e5e如何更改bootstrap navbar的颜色 03 Topics 03 Ruby Chinanetbios协议NETBEUI协议有什么用?databasenamefoxpro中的的命令格式
.net虚拟主机 什么是域名 高防dns linode代购 好看的留言 tightvnc 免费smtp服务器 太原联通测速平台 anylink 网站木马检测工具 支付宝扫码领红包 Updog 新睿云 太原联通测速 摩尔庄园注册 xshell5注册码 湖南铁通 美国服务器 ddos防火墙 电脑显示屏不亮但是主机已开机 更多