我有一个程序,类似VB的界面程序,在程序中有属性窗口和显示窗口,显示窗口上放了一些控件,比如说button按钮,edit文本框等等,而属性窗口就是用来控制某一个控件的行为,属性中有坐标(x,y),显示文字等等。假设现在我的显示窗口中只有一个Button按钮,当我在属性窗口中改变该button控件的x坐标的时候,如当前该button的x左边为3,我改成1以后,要求能够立即反应到显示窗口中,即显示窗口中的该button按钮的x坐标变成了1,移动到了x=1的位置,并且该输入焦点仍然在输入x坐标的Edit中(派生CEdit类)(在输入坐标以后没有按回车键的情况下)?说明:我现在的情况是当我在文本框里输入坐标以后,按下回车或是点其他的窗口,才会响应这一改变(通过我自定义的消息发送到显示窗口中,从而改变button的坐标)。大家说说有没有好点的方法,能够及时反应出坐标的变化呢?我还有一个想法就是设一个定时器,响应WM_TIMER和WM_UPDATE消息,比较两次输入的变化,如果前后两次输入有变化,就送出我自定义的消息。
{ AfxMessageBox("ddd");//这可以发送你自定义的消息 CEdit::OnChar(nChar, nRepCnt, nFlags);
}
{ AfxMessageBox("ddd");//这可以发送你自定义的消息 CEdit::OnChar(nChar, nRepCnt, nFlags);
}
第二种:将该Edit调用 SetOwner,这样它的Owner中就可以响应OnChar消息了。
我在派生的Edit类里添加了OnChar消息,void CMyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
CEdit::OnChar(nChar,nRepCnt,nFlags);
GetParent()->SendMessage(UM_MYMESSAGE,....); // 发送自定义的消息出去
}这样的结果确实可以改变button的坐标,但是有一个问题,每输入一个字符就会把自定义的消息发送出以后,输入焦点就不在Edit文本框中了。比如说我输入button的x坐标为2,可以立刻看到效果,但是我改变为20,就要重新点击该控件,使其重新得到输入焦点。我想要的效果就是输入坐标值以后,送出消息以后,输入焦点重新回到坐标输入框中。请教大N们有没有办法解决?
你在sendmessage之后重新SetFocus一下
因为你sendmessage的目的是改变另外控件的位置,这个焦点已经到了另外的控件上了