CRect rect;
m_wndStatusBar.GetItemRect(5,&rect);//得到所在的距形区域的大小
m_progess.Create(WS_CHILD|WS_VISIBLE|PBS_SMOOTH, rect ,
&m_wndStatusBar,111);
m_progess.SetPos(50);
但是这样并不能成功,根据单步调试的结果:如图:
The WM_USER constant is used by applications to help define private messages, usually of the form WM_USER+X, where X is an integer value.
它是来解决我们定义的值应该是多大的,在Windows消息当中都是整形的,我们定义的消息可以与Windows消息产生冲突
也就是说用户定义的消息必须是大于WM_USER的。
2)、消息的声明:
在MainFrm.h 头文件中声明:
afx void OnProgress();
3)、消息的映射:
对消息来说用ON_MESSAGE 而对命令消息来说用ON_COMMAND
而对于这个而言,没有传参,用ON_MESSAGE_VOID(UM_PROGRESS,OnProgress)
4)、消息函数的实现:
void CMainFrame::OnProgress()
{
CRect rect;
m_wndStatusBar.GetItemRect(5,&rect);//得到所在的距形区域的大小
m_progess.Create(WS_CHILD|WS_VISIBLE|PBS_SMOOTH, rect ,
&m_wndStatusBar,111);
m_progess.SetPos(50);
}
完成之后要选择怎样传递消息?
如果在Oncreate函数中用到SendMessage来传递,它的作用为:
Sends the specified message to this window. The SendMessage member function calls the window procedure directly and does not return until that window procedure has processed the message. This is in contrast to the PostMessage member function, which places the message into the window’s message queue and returns immediately.它可以来传递指定的消息,它可以直接调用Windows进程,直到Windows进程处理了这个消息,它返回。
也就是说我们以了送消息的时候,系统直接就调用消息响应函数,对我们自定义消息进行处理,当处理完成之后 ,才返回到return 0;
不符合要求。
而PostMessage是将消息放置到消息队列当中,然后按照消息摆放的须序,通过GetMessage一条条地将消息取出来 。它反消息放到消息队列
当中立即返回。
所以只需将Oncreate函数当中原来的代码注释掉,再加上PostMessage(UM_PROGRESS);即可。