vs2010中mmfc编程时mfc 双击 没有反应按钮无反应

 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
VS2010中控件MSComm的使用
下载积分:300
内容提示:VS2010中控件MSComm的使用
文档格式:PDF|
浏览次数:103|
上传日期: 01:23:28|
文档星级:
该用户还上传了这些文档
VS2010中控件MSComm的使用
官方公共微信在vs2010中用MFC画线我响应鼠标左键右键消息来画线,但是画的线要刷新一下才能显示(点击一下左键或右键)_百度知道
在vs2010中用MFC画线我响应鼠标左键右键消息来画线,但是画的线要刷新一下才能显示(点击一下左键或右键)
x=你按下啦shift键&quot,:OnLButtonUp(nFlags:: 在此添加消息处理程序代码和/ / hdc=;提醒& .MoveTo(pta); ptb=大家好&或调用默认值 &#47.y.LineTo(ptb);ReleaseDC(&dc);*HDC*if(nFlags==(MK_LBUTTON|MK_SHIFT))
this-&gt:;MessageBox(&quot,& CClientDC dc(this);
TODO,hdc):; CView,pta, CPoint point){ / pta=point.y,strlen(&quot:;*/MessageBox(&quot, CPoint point){ &#47:OnLButtonDown(UINT nF:ReleaseDC(m_hWnd:GetDC(m_hWnd);提醒&quot: 在此添加消息处理程序代码和/ CV));/ ptb,NULL);.y),&&#47:;提醒&quot,pta,ptb, point);));
TODO;; MoveToEx(hdc:OnLButtonDown(nFlags:;提醒&}void CDrawView.x.x:OnLButtonUp(UINT nF/或调用默认值 &#47,如果我拖动后不进行任何操作;*/ LineTo( dc.y=point,几条线同时出现;
this-&gt, point),strlen(&quot.x你如我连续拖动几次鼠标后再点击一下鼠标左键,那些线都不会显示void CDrawView
提问者采纳
画完了之后加上一句UpdateWindow试试
提问者评价
用update这个好像系统与问题,有时候可以直接画出来,有时候画不出
其他类似问题
为您推荐:
鼠标左键的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁也许是VS版本的关系,CButtonST中的BCMenu两个文件是无法编译通过的。
1、拷贝下载的CButtonST(我下载的v3.9)中的BtnST.h和BtnST.cpp文件到自己项目目录下。
2、将这两个文件导入项目并在对话框程序的头文件中#include "BtnST.h"
3、修改BtnST.h,注释掉&#defineBTNST_USE_BCMENU &和&#include "BCMenu.h",这样就不考虑BCMenu了。
可以编译通过,有一些warning。
4、在资源视图中导入要添加的icon
5、在对话框类中添加变量CButtonST m_
6、在OnInitDialog()中添加
m_button .SubclassDlgItem(IDC_BUTTON/*要添加icon的按钮控件ID*/, this);
m_button .SetIcon(IDI_ICON/*导入的那个icon ID*/);
m_button .SetFlat(TRUE/*让这个按钮扁平还是立体*/);
按钮的大小要适当调整。
阅读(...) 评论()(MFC)Vs2010制作Visual Studio风格的停靠侧栏窗口(CDockablePane里嵌套FormView表单视图) - c++语言程序开发技术文章_c++编程 - 红黑联盟
(MFC)Vs2010制作Visual Studio风格的停靠侧栏窗口(CDockablePane里嵌套FormView表单视图)
[cpp] view plaincopyprint?关键字:CDockablePane, &Visual Studio风格的Gui界面,,CDoackable里嵌套FormView表单视图步骤 &
关键字:CDockablePane, &Visual Studio风格的Gui界面,,CDoackable里嵌套FormView表单视图步骤[cpp] view plaincopyprint?转载注意作者原创:K_Linux_Man &
转载注意作者原创:K_Linux_Man
一直比较喜欢Visual Studio两侧的窗口,可以来回滑动,并且和点击图钉,钉住悬浮的窗口。那就尝试着如何去做出来。
VC++6.0如果要去实现的话,不是不可以,但是得借助第三方的类库,比如说,ToolKit,但是非常的麻烦。。。
Visual Studio里面的新建Demo就可以实现这一功能,何乐而不为呢!!!
那停靠窗口里面用什么填充呢? 树形控件??新建的Demo里有了。更直观一点的话,还是用FormView吧。。。好的。。。开始
要不先来个最终的效果图..... 自己添加的解决方案停靠窗口,里面嵌套FormView视图窗口.而文件视图,类视图,还有属性,Demo里面默认生成的。只有解决方案那个是自己添加的。
新建两个文件,SolutionWnd.h SolutionWnd.cpp
在资源窗口里新建一个FormView的Dialog,修改ID为IDD_FORMVIEW,建立一个与FormView相关联的的类, 利用类向导,添加一个名为CMfcFormView,选择基类为CFormView. 生成在SolutionWnd.h和SolutionWnd.cpp文件里。
SoulutionWnd.h
#pragma once &&
#include &Resource.h& &&
// CMfcFormView 窗体视图 &&
class CMfcFormView : public CFormView &
& & &SPAN style=&COLOR: rgb(255,0,0)&&DECLARE_DYNCREATE&/SPAN&(CMfcFormView)//&SPAN style=&BACKGROUND-COLOR: rgb(255,0,0)&&具有动态创建对象的能力&/SPAN& &&
& & CMfcFormView(): CFormView(CMfcFormView::IDD) &
& & {}// 动态创建所使用的受保护的构造函数 &&
& & ~CMfcFormView() &
& & enum { IDD = IDD_FORMVIEW }; &
#ifdef _DEBUG &&
& & virtual void AssertValid() &
#ifndef _WIN32_WCE &&
& & virtual void Dump(CDumpContext& dc) &
protected: &
& & virtual void DoDataExchange(CDataExchange* pDX); & &// DDX/DDV 支持 &&
& & DECLARE_MESSAGE_MAP() &
#pragma once
#include &Resource.h&
// CMfcFormView 窗体视图
class CMfcFormView : public CFormView
DECLARE_DYNCREATE(CMfcFormView)//具有动态创建对象的能力
CMfcFormView(): CFormView(CMfcFormView::IDD)
{}// 动态创建所使用的受保护的构造函数
~CMfcFormView()
enum { IDD = IDD_FORMVIEW };
#ifdef _DEBUG
virtual void AssertValid()
#ifndef _WIN32_WCE
virtual void Dump(CDumpContext& dc)
protected:
virtual void DoDataExchange(CDataExchange* pDX); & &// DDX/DDV 支持
DECLARE_MESSAGE_MAP()[cpp] view plaincopyprint?}; &
SolutionWnd.cpp&
#include &stdafx.h& &&
#include &SolutionWnd.h& &&
// CMfcFormView &&
&SPAN style=&COLOR: #ff0000&&IMPLEMENT_DYNCREATE&/SPAN&(CMfcFormView, CFormView) &
void CMfcFormView::DoDataExchange(CDataExchange* pDX) &
& & CFormView::DoDataExchange(pDX); &
BEGIN_MESSAGE_MAP(CMfcFormView, CFormView) &
END_MESSAGE_MAP() &
// CMfcFormView 诊断 &&
#ifdef _DEBUG &&
void CMfcFormView::AssertValid() const &
& & CFormView::AssertValid(); &
#ifndef _WIN32_WCE &&
void CMfcFormView::Dump(CDumpContext& dc) const &
& & CFormView::Dump(dc); &
#endif //_DEBUG &&
// CMfcFormView 消息处理程序 &
#include &stdafx.h&
#include &SolutionWnd.h&
// CMfcFormView
IMPLEMENT_DYNCREATE(CMfcFormView, CFormView)
void CMfcFormView::DoDataExchange(CDataExchange* pDX)
CFormView::DoDataExchange(pDX);
BEGIN_MESSAGE_MAP(CMfcFormView, CFormView)
END_MESSAGE_MAP()
// CMfcFormView 诊断
#ifdef _DEBUG
void CMfcFormView::AssertValid() const
CFormView::AssertValid();
#ifndef _WIN32_WCE
void CMfcFormView::Dump(CDumpContext& dc) const
CFormView::Dump(dc);
#endif //_DEBUG
// CMfcFormView 消息处理程序
至此我们已经把FormView派生出的CMfcFormView类建好了。
我们需要建立一个CDockablePane的派生类,予以容纳FormView,建立派生出的CDockablePane类为CSolutionWnd
利用类向导,添加名为CSolutionWnd,基类为CDockablePane...生成文件SolutionWnd.h和SolutionWnd.cpp
SolutionWnd.h里又添加了如下代码
class CSolutionWnd : public CDockablePane &
& & &DECLARE_DYNAMIC(CSolutionWnd) &
& & //构造函数 &&
& & CSolutionWnd(); &
& & //析构函数 &&
& & ~CSolutionWnd(); &
& & //特性 &&
protected: &
& & CMfcFormView* & m_pformV &
& & DECLARE_MESSAGE_MAP() &
class CSolutionWnd : public CDockablePane
DECLARE_DYNAMIC(CSolutionWnd)
//构造函数
CSolutionWnd();
//析构函数
~CSolutionWnd();
protected:
CMfcFormView* & m_pformV
DECLARE_MESSAGE_MAP()
SolutionWnd.cpp&
新添加的代码
BEGIN_MESSAGE_MAP(CSolutionWnd, CDockablePane) &
END_MESSAGE_MAP() &
IMPLEMENT_DYNAMIC(CSolutionWnd, CDockablePane) &
CSolutionWnd::CSolutionWnd() &
& & m_pformView = (CMfcFormView*) (RUNTIME_CLASS(CMfcFormView)-&CreateObject()); &
CSolutionWnd::~CSolutionWnd() &
BEGIN_MESSAGE_MAP(CSolutionWnd, CDockablePane)
END_MESSAGE_MAP()
IMPLEMENT_DYNAMIC(CSolutionWnd, CDockablePane)
CSolutionWnd::CSolutionWnd()
m_pformView = (CMfcFormView*) (RUNTIME_CLASS(CMfcFormView)-&CreateObject());
CSolutionWnd::~CSolutionWnd()
1.在MainFrm.cpp里添加m_wndSolution变量,类型为CSolutionWnd
2.在MainFrm.cpp里的CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)函数里添加代码
// 创建停靠窗口 &&
if (!CreateDockingWindows()) & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &_ &
TRACE0(&未能创建停靠窗口\n&); & & & &
return -1; & & & & &
} & & & & &
& & & & & & & &
m_wndFileView.EnableDocking(CBRS_ALIGN_ANY); & & & & & & &
m_wndClassView.EnableDocking(CBRS_ALIGN_ANY); & & & & & & & &&
DockPane(&m_wndFileView); & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & | &
CDockablePane* pTabbedBar = NULL; & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &| &
m_wndClassView.AttachToTabWnd(&m_wndFileView, DM_SHOW, TRUE, &pTabbedBar); & & & & & & & & & & & &&
m_wndOutput.EnableDocking(CBRS_ALIGN_ANY); &
DockPane(&m_wndOutput); &
m_wndProperties.EnableDocking(CBRS_ALIGN_ANY); &
DockPane(&m_wndProperties);_ &
&SPAN style=&COLOR: #ff0000&&m_wndSolution.EnableDocking(CBRS_ALIGN_ANY); &
m_wndSolution.AttachToTabWnd(&m_wndProperties, DM_SHOW, TRUE, &pTabbedBar);&/SPAN&&PRE class=cpp name=&code&& // &红色为自己添加&/PRE&&P&&/P& &&
&PRE&&/PRE& &
&P&3.在MainFrm.cpp里的CMainFrame::CreateDockingWindows()中添加代码&/P& &
&PRE class=cpp name=&code&&&SPAN style=&COLOR: #ff0000&&//创建解决方案窗口 &&
& & CString strSolutionW &
& & bNameValid = strSolutionWnd.LoadString(IDS_SOLUTION_WND); &
& & ASSERT(bNameValid); &
& & if(!&/SPAN&&SPAN style=&COLOR: #3333ff&&m_wndSolution.Create&/SPAN&&SPAN style=&COLOR: #ff0000&&(strSolutionWnd,this,CRect(0,0,200,200),TRUE,1234,WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_RIGHT | CBRS_FLOAT_MULTI)) &
& & & & TRACE0(&未能创建&解决方案窗口\n&); &
& & & & return FALSE; &
& & }&/SPAN&&/PRE&既然我们要创建CDockablePane那必然需要改写OnCreate函数和OnSize函数,原因是,通过CDockablePane的创建必然会调用OnCreate函数,在OnCreate函数里创建FormView,在OnSize里面调整FormView的大小,覆盖整个CDockablePane。 &
&P&利用类向导在CSolution声明里添加消息映射函数&/P& &
&PRE class=cpp name=&code&&public: &
& & DECLARE_MESSAGE_MAP() &
& & afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); &
& & afx_msg void OnSize(UINT nType, int cx, int cy);&/PRE&&BR& &
&PRE class=cpp name=&code&&int CSolutionWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) &
& & if (CDockablePane::OnCreate(lpCreateStruct) == -1) &
& & & & return -1; &
& & // TODO: &在此添加您专用的创建代码 &&
& & return 0; &
void CSolutionWnd::OnSize(UINT nType, int cx, int cy) &
& & CDockablePane::OnSize(nType, cx, cy); &
& & // TODO: 在此处添加消息处理程序代码 &&
&/PRE&&BR& &
利用类向导在CMfcFormView里添加消息映射函数OnCreate以及改写虚函数Create &
&PRE class=cpp name=&code&&afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); &
virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);&/PRE&&BR& &
&PRE class=cpp name=&code&&// CMfcFormView 消息处理程序 &&
int CMfcFormView::OnCreate(LPCREATESTRUCT lpCreateStruct) &
& & if (CFormView::OnCreate(lpCreateStruct) == -1) &
& & & & return -1; &
& & // TODO: &在此添加您专用的创建代码 &&
& & return 0; &
BOOL CMfcFormView::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) &
& & // TODO: 在此添加专用代码和/或调用基类 &&
& & return CFormView::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext); &
&P&在CSolution.h里声明CMfcFormView*类型的指针变量 &/P& &
&PRE class=cpp name=&code&&protected: &
& & CMfcFormView* & m_pformV&/PRE&&BR& &
在CSolution的构造函数里创建CMfcFormView对象 &
&PRE class=cpp name=&code&&CSolutionWnd::CSolutionWnd() &
& & m_pformView = (CMfcFormView*) (RUNTIME_CLASS(CMfcFormView)-&CreateObject()); &
&/PRE&&BR& &
在CSolution的OnCreate函数里创建FormView &
&PRE class=cpp name=&code&&int CSolutionWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) &
& & if (CDockablePane::OnCreate(lpCreateStruct) == -1) &
& & & & return -1; &
& & // TODO: &在此添加您专用的创建代码 &&
& & &SPAN style=&COLOR: #ff0000&&RECT &
& & GetClientRect(&rect); &
& & m_pformView-&Create(NULL, NULL, &WS_CHILD|WS_VISIBLE, rect, this, 123, NULL);&/SPAN& &
& & return 0; &
}&/PRE&&BR& &
在CSolution的OnSize函数里调整FormView填充整个DockablePane区域 &
&PRE class=cpp name=&code&&void CSolutionWnd::OnSize(UINT nType, int cx, int cy) &
& & CDockablePane::OnSize(nType, cx, cy); &
& & // TODO: 在此处添加消息处理程序代码 &&
& & if (GetSafeHwnd() == NULL) &
& & if(m_pformView-&GetSafeHwnd()!=NULL) &
& & & & CR &
& & & & GetClientRect(rect); &
& & & & m_pformView-&SetWindowPos(NULL, rect.left, rect.top, rect.Width(), rect.Height(), S_NOACTIVATE | SWP_NOZORDER); &
}&/PRE&&BR& &
&P&至此结束。。。回答一些疑问。&/P& &
&P&为什么要改写CMfcFormView的Create虚函数呢?&/P& &
&P&因为我们要用到这句函数。&/P& &
&P&&SPAN style=&COLOR: rgb(255,0,0)&&m_pformView-&Create(NULL, NULL, WS_CHILD|WS_VISIBLE, rect, this, 123, NULL);&/SPAN&&/P& &
&P&调用到FormView::Create函数。由于FormView的Create函数是protected类型的.所以我们必须改写FormView::Create函数为Publc类型。虽然我们在Create函数里什么也没有做什么。如果不重写Create函数的话,那么会出现编译错误。&/P& &
// 创建停靠窗口
if (!CreateDockingWindows()) & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &_
TRACE0(&未能创建停靠窗口\n&); & & &
return -1; & & & &
& & & & & & &
m_wndFileView.EnableDocking(CBRS_ALIGN_ANY); & & & & & &
m_wndClassView.EnableDocking(CBRS_ALIGN_ANY); & & & & & & &&
DockPane(&m_wndFileView); & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & |
CDockablePane* pTabbedBar = NULL; & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &|
m_wndClassView.AttachToTabWnd(&m_wndFileView, DM_SHOW, TRUE, &pTabbedBar); & & & & & & & & & & &&
m_wndOutput.EnableDocking(CBRS_ALIGN_ANY);
DockPane(&m_wndOutput);
m_wndProperties.EnableDocking(CBRS_ALIGN_ANY);
DockPane(&m_wndProperties);_
m_wndSolution.EnableDocking(CBRS_ALIGN_ANY);
m_wndSolution.AttachToTabWnd(&m_wndProperties, DM_SHOW, TRUE, &pTabbedBar);[cpp] view plaincopyprint?// &红色为自己添加 & // &红色为自己添加
3.在MainFrm.cpp里的CMainFrame::CreateDockingWindows()中添加代码
&SPAN style=&COLOR: #ff0000&&//创建解决方案窗口 & & & CString strSolutionW & & &bNameValid = strSolutionWnd.LoadString(IDS_SOLUTION_WND); & & &ASSERT(bNameValid); & & &if(!&/SPAN&&SPAN style=&COLOR: #3333ff&&m_wndSolution.Create&/SPAN&&SPAN style=&COLOR: #ff0000&&(strSolutionWnd,this,CRect(0,0,200,200),TRUE,1234,WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_RIGHT | CBRS_FLOAT_MULTI)) & & &{ & & & & &TRACE0(&未能创建&解决方案窗口\n&); & & & & &return FALSE; & & &}&/SPAN& &//创建解决方案窗口
CString strSolutionW
bNameValid = strSolutionWnd.LoadString(IDS_SOLUTION_WND);
ASSERT(bNameValid);
if(!m_wndSolution.Create(strSolutionWnd,this,CRect(0,0,200,200),TRUE,1234,WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_RIGHT | CBRS_FLOAT_MULTI))
TRACE0(&未能创建&解决方案窗口\n&);
return FALSE;
}既然我们要创建CDockablePane那必然需要改写OnCreate函数和OnSize函数,原因是,通过CDockablePane的创建必然会调用OnCreate函数,在OnCreate函数里创建FormView,在OnSize里面调整FormView的大小,覆盖整个CDockablePane。
利用类向导在CSolution声明里添加消息映射函数
public: & & & &DECLARE_MESSAGE_MAP() & & &afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); & & &afx_msg void OnSize(UINT nType, int cx, int cy); &public:
DECLARE_MESSAGE_MAP()
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnSize(UINT nType, int cx, int cy);
int CSolutionWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) &{ & & &if (CDockablePane::OnCreate(lpCreateStruct) == -1) & & & & &return -1; & & & &// TODO: &在此添加您专用的创建代码 & & & & return 0; &} & & & &void CSolutionWnd::OnSize(UINT nType, int cx, int cy) &{ & & &CDockablePane::OnSize(nType, cx, cy); & & & &// TODO: 在此处添加消息处理程序代码 & & & & } &int CSolutionWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
if (CDockablePane::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: &在此添加您专用的创建代码
void CSolutionWnd::OnSize(UINT nType, int cx, int cy)
CDockablePane::OnSize(nType, cx, cy);
// TODO: 在此处添加消息处理程序代码
利用类向导在CMfcFormView里添加消息映射函数OnCreate以及改写虚函数Create
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); &virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL); &afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
// CMfcFormView 消息处理程序 & & int CMfcFormView::OnCreate(LPCREATESTRUCT lpCreateStruct) &{ & & &if (CFormView::OnCreate(lpCreateStruct) == -1) & & & & &return -1; & & & &// TODO: &在此添加您专用的创建代码 & & & & return 0; &} & & &BOOL CMfcFormView::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) &{ & & &// TODO: 在此添加专用代码和/或调用基类 & & & & return CFormView::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext); &} &// CMfcFormView 消息处理程序
int CMfcFormView::OnCreate(LPCREATESTRUCT lpCreateStruct)
if (CFormView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: &在此添加您专用的创建代码
BOOL CMfcFormView::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
// TODO: 在此添加专用代码和/或调用基类
return CFormView::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
在CSolution.h里声明CMfcFormView*类型的指针变量&
protected: & & &CMfcFormView* & m_pformV &protected:
CMfcFormView* & m_pformV
在CSolution的构造函数里创建CMfcFormView对象
CSolutionWnd::CSolutionWnd() &{ & & &m_pformView = (CMfcFormView*) (RUNTIME_CLASS(CMfcFormView)-&CreateObject()); &} &CSolutionWnd::CSolutionWnd()
m_pformView = (CMfcFormView*) (RUNTIME_CLASS(CMfcFormView)-&CreateObject());
在CSolution的OnCreate函数里创建FormView
int CSolutionWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) &{ & & &if (CDockablePane::OnCreate(lpCreateStruct) == -1) & & & & &return -1; & & & &// TODO: &在此添加您专用的创建代码 & & & & &SPAN style=&COLOR: #ff0000&&RECT & & &GetClientRect(&rect); & & & &m_pformView-&Create(NULL, NULL, &WS_CHILD|WS_VISIBLE, rect, this, 123, NULL);&/SPAN& & & & & & &return 0; &} &int CSolutionWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
if (CDockablePane::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: &在此添加您专用的创建代码
GetClientRect(&rect);
m_pformView-&Create(NULL, NULL, &WS_CHILD|WS_VISIBLE, rect, this, 123, NULL);
在CSolution的OnSize函数里调整FormView填充整个DockablePane区域
void CSolutionWnd::OnSize(UINT nType, int cx, int cy) &{ & & &CDockablePane::OnSize(nType, cx, cy); & & & &// TODO: 在此处添加消息处理程序代码 & & & & & & if (GetSafeHwnd() == NULL) & & &{ & & & & & & & &} & & &if(m_pformView-&GetSafeHwnd()!=NULL) & & &{ & & & & &CR & & & & &GetClientRect(rect); & & & & &m_pformView-&SetWindowPos(NULL, rect.left, rect.top, rect.Width(), rect.Height(), SWP_NOACTIVATE | SWP_NOZORDER); & & &} &} &void CSolutionWnd::OnSize(UINT nType, int cx, int cy)
CDockablePane::OnSize(nType, cx, cy);
// TODO: 在此处添加消息处理程序代码
if (GetSafeHwnd() == NULL)
if(m_pformView-&GetSafeHwnd()!=NULL)
GetClientRect(rect);
m_pformView-&SetWindowPos(NULL, rect.left, rect.top, rect.Width(), rect.Height(), SWP_NOACTIVATE | SWP_NOZORDER);
至此结束。。。回答一些疑问。
为什么要改写CMfcFormView的Create虚函数呢?
因为我们要用到这句函数。
m_pformView-&Create(NULL, NULL, WS_CHILD|WS_VISIBLE, rect, this, 123, NULL);
调用到FormView::Create函数。由于FormView的Create函数是protected类型的.所以我们必须改写FormView::Create函数为Publc类型。虽然我们在Create函数里什么也没有做什么。如果不重写Create函数的话,那么会出现编译错误。

我要回帖

更多关于 mfc区分单击与双击 的文章

 

随机推荐