+ -
当前位置:首页 → 问答吧 → MFC框架中的问题!能不能来指导下

MFC框架中的问题!能不能来指导下

时间:2011-12-20

来源:互联网

头文件中的代码:
class CMyApp : public CWinApp
{
public:
virtual BOOL InitInstance();
};

class CMainWindow : public CWnd
{
public:
CMainWindow();
protected:
char m_szText[1024]; // 客户区文本缓冲区
RECT m_rcInfo; // 文本所在方框的大小

protected:
virtual void PostNcDestroy();
afx_msg BOOL OnCreate(LPCREATESTRUCT);
afx_msg void OnPaint();
afx_msg void OnTimer(UINT nIDEvent);
DECLARE_MESSAGE_MAP()
};
////////////////////////////////////////////////////////
CPP文件中的代码:
BOOL CMyApp::InitInstance()
{
m_pMainWnd = new CMainWindow;
::ShowWindow(*m_pMainWnd, m_nCmdShow);
::UpdateWindow(*m_pMainWnd);

return TRUE;
}
然后我调试到::ShowWindow(*m_pMainWnd, m_nCmdShow);时按F11进入到了
operator HWND() const { return m_hWnd; }里面去!

我就是想不明白为什么会跳到operator HWND() const { return m_hWnd; }这里面运行呢?

作者: hyz23je   发布时间: 2011-12-20

UpdateWindow API需要HWND类型的参数 所以会把你的*m_pMainWnd 转换成HWND 就调用了
HWND 的重载函数...

作者: bingying19872008   发布时间: 2011-12-20

::ShowWindow(*m_pMainWnd, m_nCmdShow);
C/C++ code
BOOL ShowWindow( 
  HWND hWnd, 
  int nCmdShow 
); 

你说呢

CWnd类重载了HWND类型

作者: VisualEleven   发布时间: 2011-12-20

API中的ShowWindow和UpdateWindow这些函数要求第一参数未HWND参数,而你给的参数却是CMainWindow类对象,这两个对象的关系是后者封装了前者,即把HWND当做自己的成员。CMainWindow的基类是CWnd,CWnd包含一个重载的操作符:
operator HWND() const;

所以函数调用的时候,自动调用了CWnd::HWND(),将你的窗口类对象转换为窗口句柄,再继续执行。

你执行进去的时候,按shift+F11会执行出这个函数的范围,只是再按F11是没法继续进::ShowWindow了,这个你没有源码。

作者: dream0411   发布时间: 2011-12-20