我在对话框工程创建一个子窗口,在对话框初始化时添加一个定时器,定时器不能正常工作,隐藏子窗口是,定时器能正常工作。望解惑哇~初始化代码: SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE); CRect rcClient;
GetClientRect(&rcClient);
int nWidth = rcClient.Width();
int nHeight = rcClient.Height(); m_rcLeftDock.SetRect(CPoint(0 ,0) ,CPoint(nWidth/4 ,nHeight));
m_rcRightDock.SetRect(CPoint(nWidth*3/4 ,0) ,CPoint(nWidth ,nHeight));
CRect rcWnd(0 ,0 ,100 ,100);
m_wndDock.Create(NULL ,NULL ,WS_CHILD|WS_VISIBLE ,rcWnd ,this ,10);
m_wndDock.SetDockNotify(GetSafeHwnd() ,WM_DOCK_MESSAGE);
m_wndDock.ShowWindow(SW_HIDE);//隐藏式定时器能用,为Show时不能正常工作 ::SetTimer(1 ,1000 ,NULL);
对话框 子窗口 定时器
SetIcon(m_hIcon, FALSE); CRect rcClient;
GetClientRect(&rcClient);
int nWidth = rcClient.Width();
int nHeight = rcClient.Height(); m_rcLeftDock.SetRect(CPoint(0 ,0) ,CPoint(nWidth/4 ,nHeight));
m_rcRightDock.SetRect(CPoint(nWidth*3/4 ,0) ,CPoint(nWidth ,nHeight));
CRect rcWnd(0 ,0 ,100 ,100);
m_wndDock.Create(NULL ,NULL ,WS_CHILD|WS_VISIBLE ,rcWnd ,this ,10);
m_wndDock.SetDockNotify(GetSafeHwnd() ,WM_DOCK_MESSAGE);
m_wndDock.ShowWindow(SW_HIDE);//隐藏式定时器能用,为Show时不能正常工作 ::SetTimer(1 ,1000 ,NULL);
对话框 子窗口 定时器
解决方案 »
- 双方都在Port-Restricted Cone NAT后的客户端,udp穿透,打洞时发生的郁闷问题
- m_pRecordset->MoveNext()执行这部的时候速度特别慢
- 请问如何判断用户在"Combo box组合框"里选中了哪一项? 是什么函数? 谢谢你的帮助
- 怎样通过程序在foxmail的地址薄中给一个联系人添加多个邮件地址
- 数据类型转换
- 在设置MapMode后的StretchBlt问题,请进!
- 我使用HTREEITEM类型时遇到的问题
- 请大侠赐教。。。
- 如何修改 ListBox 中一个 Item 的文字?
- 用MFC如何实现像记事本中的自动换行切换功能?
- 编辑框显示浮点数据的问题
- vc++的picture控件显示问题
m_wndDock.SetDockNotify(GetSafeHwnd() ,WM_DOCK_MESSAGE);
注释掉,定时器也可以工作吧?
To Mackz:
确实如你所说,注释掉那行定时器也能工作。请教下这是什么原因?
CDockWnd::CDockWnd()
{}CDockWnd::~CDockWnd()
{
}
BEGIN_MESSAGE_MAP(CDockWnd, CWnd)
//ON_WM_PAINT()
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()
void CDockWnd::SetDockNotify(HWND hWnd ,UINT nDockMessage)
{
m_hDocWnd = hWnd;
m_nNotifyEvent = nDockMessage;
}
// CDockWnd message handlers/*void CDockWnd::OnPaint()
{
/*CDC *pDC = GetDC();
CRect rcClient;
GetClientRect(&rcClient);
pDC->FillRect(&rcClient ,&CBrush(RGB(100 ,200 ,100)));
ReleaseDC(pDC);
}*/void CDockWnd::OnLButtonDown(UINT nFlags, CPoint point)
{
CWnd::OnLButtonDown(nFlags, point);
}SetDockNotify是在父子窗口间进行通信,设置一些参数,::SendMessage时使用。
我现在简单重现了一下,发现子窗口没有WM_PAINT的时候父窗口的OnTimer也能响应,感觉像是子窗口的WM_PAINT或某个消息映射 影响了 WM_TIMER消息传给父窗口。对于消息机制不是很了解,所以有点困惑。
void CDockWnd::OnPaint()
{
CPaintDC dc(this);
CRect rcClient;
GetClientRect(&rcClient);
dc.FillRect(&rcClient ,&CBrush(RGB(100 ,200 ,100)));
}