首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

GetDlgCtrlID函数返回值无效的有关问题

2013-12-07 
【求助】GetDlgCtrlID函数返回值无效的问题我把工程从VS2003移植到VS2012,有个Menu的选项点击它不正常显示,

【求助】GetDlgCtrlID函数返回值无效的问题
我把工程从VS2003移植到VS2012,有个Menu的选项点击它不正常显示,我跟踪和对比两个版本代码发现,问题出现在WM_LBUTTONDOWN的消息响应函数参数上:

VS2003上:

GetParent()->SendMessage(WM_LBUTTONDOWN,100+GetDlgCtrlID(),MAKEWPARAM(point.x,point.y));

这里的GetDlgCtrlID()返回值为0,按照MSDN上说法是函数成功了。
然后在
void CMenuBar::OnLButtonDown(UINT nFlags, CPoint point) 
{
SetCursor (LoadCursor(NULL, IDC_SIZEALL));

这里nFlags为100,不会出现问题,按钮消息正常;

VS2012中:
GetParent()->SendMessage(WM_LBUTTONDOWN,100+GetDlgCtrlID(),MAKEWPARAM(point.x,point.y));

GetDlgCtrlID()返回值是一个无效值6257232,也就是说函数执行失败。我把函数丢到监视窗口中,提示:函数 CWnd::GetDlgCtrlID 没有地址,可能是因为编译器优化。

请教各位大神,这种优化体现在什么方面?请给一个思路,谢谢。。

[解决办法]
CMenuButton::CMenuButton(HMENU hMenu, int nIndex,CWnd* pWnd)
{

m_bt.Create(_T(""), WS_VISIBLE 
[解决办法]
 WS_CHILD 
[解决办法]
 BS_PUSHBUTTON 
[解决办法]
 BS_OWNERDRAW, 
CRect(0,0,0,0), pWnd, (WM_USER+100+nIndex));
}

void CGuiMenuButton::OnLButtonDown(UINT nFlags, CPoint point)
{
ShowWindow(SW_HIDE);
ClientToScreen(&point);
const int nCtrlID = GetDlgCtrlID();
GetParent()->SendMessage(WM_LBUTTONDOWN,nCtrlID,MAKEWPARAM(point.x,point.y));
}

void CMenuBar::OnLButtonDown(UINT nFlags, CPoint point) 
{
int nIndex=nFlags >= (WM_USER+100)? nFlags-(WM_USER+100): -1;
}

看了一下, 这样就没问题了

热点排行