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)这个是什么意思?相关文档
捷锐数据官网商家介绍捷锐数据怎么样?捷锐数据好不好?捷锐数据是成立于2018年一家国人IDC商家,早期其主营虚拟主机CDN,现在主要有香港云服、国内物理机、腾讯轻量云代理、阿里轻量云代理,自营香港为CN2+BGP线路,采用KVM虚拟化而且单IP提供10G流量清洗并且免费配备天机盾可达到屏蔽UDP以及无视CC效果。这次捷锐数据给大家带来的活动是香港云促销,总共放量40台点击进入捷锐数据官网优惠活动内...
ttcloud怎么样?ttcloud是一家海外服务器厂商,运营服务器已经有10年时间,公司注册地址在香港地区,业务范围包括服务器托管,机柜托管,独立服务器等在内的多种服务。我们后台工单支持英文和中文服务。TTcloud最近推出了新上架的日本独立服务器促销活动,价格 $70/月起,季付送10Mbps带宽。也可以跟进客户的需求进行各种DIY定制。点击进入:ttcloud官方网站地址TTcloud拥有自...
云步云怎么样?云步云是创建于2021年的品牌,主要从事出售香港vps、美国VPS、日本VPS、香港独立服务器、香港站群服务器等,机房有香港、美国、日本东京等机房,目前在售VPS线路有CN2+BGP、CN2 GIA,香港的线路也是CN2直连大陆,该公司旗下产品均采用KVM虚拟化架构。目前,云步云提供香港安畅、沙田、大浦、葵湾、将军澳、新世界等CN2机房云服务器,2核2G5M仅72.5元/月起。点击进...
implement_dynamic为你推荐
ico监管为何央行叫停代币发行?国家法规数据库哪一数据库包含中国国家标准,涉及科学研究,社会管理以及工农业生产的各个领netbios协议NetBIOS协议起什么作用?全局钩子delphi 键盘全局钩子东兴证券网站东兴证券交易软件如何操作?泛微协同办公系统泛微OA系统怎么创建新人员泛微协同办公系统泛微软件怎么样?做协同办公的,我要来这做销售前景怎么样?请大家对这个行业或公司了解的给些建议。flex是什么这些b365m和b360m什么意思driversbackup为什么电脑开机时一直进backup system手机在线客服怎么才能联系到腾讯人工客服
重庆服务器租用 北京主机租用 如何查询ip地址 主机测评 韩国俄罗斯 pccw 美国主机论坛 免费博客空间 免费静态空间 卡巴斯基永久免费版 美国十次啦服务器 双线主机 域名和空间 免费测手机号 最好的qq空间 33456 免费私人服务器 个人免费主页 腾讯总部在哪 湖南idc 更多