我自己从CStatic派生一个类,响应WM_CREATE、WM_SIZE等消息,不会成功被调用,为何?

郑大满 2004-12-06 10:25:16
我自己从CStatic派生一个类,响应WM_CREATE、WM_SIZE等消息,不会成功被调用,为何?
BEGIN_MESSAGE_MAP(CMyStatic, CStatic)
//{{AFX_MSG_MAP(CLabelEx)
ON_WM_PAINT()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONDOWN()
ON_WM_CREATE() //---->
//}}AFX_MSG_MAP
END_MESSAGE_MAP()


//在对话框中,使用该类连接CStatic控件,该响应函数不会被调用,为何?
int CMyStaticx::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
TRACE0("CMyStatic::OnCreate\n");
if (CStatic::OnCreate(lpCreateStruct) == -1)
return -1;

// TODO: Add your specialized creation code here

return 0;
}

在对话框中的控件创建时引发的WM_CREATE消息怎么我们自己不能得到呢?
...全文
200 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
黑子白子 2004-12-06
  • 打赏
  • 举报
回复
对话框静态模板上的控件创建的过程稍有不同,它的OnCreate消息将由对话框处理。
你动态创建的话,就可以响应了。
郑大满 2004-12-06
  • 打赏
  • 举报
回复
CStatic的ID已经改过的!

我按danyueer(淡月儿:清水上的足音) 的做法做了,如下:
BOOL CTestDlg::PreTranslateMessage(MSG* pMsg)
{// TODO: Add your specialized code here and/or call the base class
if (pMsg->message == WM_CREATE )
{ //我调试了,不会进入这里啊????
if ( pMsg->hwnd == m_MyStatic.GetSafeHwnd() )
{
m_MyStatic.SendMessage(pMsg->message, pMsg->wParam, pMsg->lParam);
return TRUE;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
同桌老王 2004-12-06
  • 打赏
  • 举报
回复
把CStatic的ID改一个值
默认IDC_STATIC是不会处理消息映射的
郑大满 2004-12-06
  • 打赏
  • 举报
回复
MFC的对话框的创建过程中,为何不让其中的控件自己响应这些消息,有什么更简单的方法得到响应吗?
danyueer 2004-12-06
  • 打赏
  • 举报
回复
这是常见的对话框消息无响应问题。

你必须重载对话框的PreTranslateMessage函数,把消息SendMessage到目标控件上。
老夏Max 2004-12-06
  • 打赏
  • 举报
回复
怎么可能,除非你没有做消息映射!

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧