读书人

GetDlgItem两种情况,该怎么处理

发布时间: 2012-03-22 17:43:57 作者: rapoo

GetDlgItem两种情况
GetDlgItem有两种形式,1.GetDlgItem(int nID);2. GetDlgItem(int nID, HWND* phWnd)。

winocc.cpp文件里,GetDlgItem的原型为:
CWnd* CWnd::GetDlgItem(int nID) const
{
ASSERT(::IsWindow(m_hWnd));

if (m_pCtrlCont == NULL)
return CWnd::FromHandle(::GetDlgItem(m_hWnd, nID));//这里的m_hWnd和nID位置是不是反了的?
else
return m_pCtrlCont->GetDlgItem(nID);
}
GetDlgItem(int nID, HWND* phWnd)的原型为:
void CWnd::GetDlgItem(int nID, HWND* phWnd) const
{
ASSERT(::IsWindow(m_hWnd));
ASSERT(phWnd != NULL);

if (m_pCtrlCont == NULL)
*phWnd = ::GetDlgItem(m_hWnd, nID);
else
m_pCtrlCont->GetDlgItem(nID, phWnd);
}

这里有一个疑问,GetDlgItem(int nID)里调用GetDlgItem(m_hWnd, nID),这里的m_hWnd和nID位置是不是反了的?

[解决办法]
::GetDlgItem(m_hWnd, nID);
前面有::全局域作用符,表示调用的是API
GetDlgItem(int nID, HWND* phWnd)是CWnd类封装的类函数
[解决办法]
GetDlgItem原形:
HWND (_stdcall *GetDlgItem)(HWND,int);
参数:
HWND 为窗口句柄
int 窗口句柄内的控件/子窗口 ID
返回值:
HWND 控件/子窗口 句柄
NULL 父窗口无效/ID无效,GetLastError()查询错误代码。


[解决办法]
DWORD FilterFun(DWORD dwCode)
{
switch(dwCode)
{
//windows定义的各种异常常量


}
return nVal;//自己定义
}
//异常捕获
__try
{

}
__except(FilterFun(GetExceptionCode()))
{


}

读书人网 >VC/MFC

热点推荐