环境:VS2008,建立一个基于对话框的应用程序
步骤:
1.在资源Dialog视图内添加一个按钮,ID号:IDB_BUTTON,Caption:“你能抓到我吗?“
2.项目->添加类:添加一个从CButton继承而来的类,命名为CZhaBtn
3.为按钮关联一个变量m_btn,变量类型为CZhaBtn
4.在添加的新类CZhaBtn中添加一个WM_MOUSEMOVE消息响应函数OnMouseMove(),编辑代码
void CZhaBtn::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
WINDOWINFO wi;
GetParent()->GetWindowInfo(&wi);
CRect pt_origin=wi.rcWindow;
srand((unsigned int)time(NULL));
int x=rand()%(wi.cxWindowBorders+pt_origin.left);
int y=rand()%(wi.cyWindowBorders+pt_origin.top);
SetWindowPos(NULL,x,y,0,0,SWP_NOZORDER |SWP_NOSIZE);
ShowWindow(SW_NORMAL);
CButton::OnMouseMove(nFlags, point);
}
问题思考:
1.GetParent()能否用GetDlgItem()来代替?
GetDlgItem()通过一个指定的ID标识来返回该标识的窗口指针,当调用GetDlgItem(IDD_FINDBUTTON_DIALOG)->GetWindowInfo(&wi);时,程序会报错!
获取父窗口的指针用GetParent(),获取父窗口上的指定控件的指针用GetDlgItem()