我有一个程序,类似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消息,比较两次输入的变化,如果前后两次输入有变化,就送出我自定义的消息。

解决方案 »

  1.   

    timer可以,不过也可以直接用onkeydown来判断当前的focus是否为那个edit(设置一个标志位)......
      

  2.   

    那VB程序中的那个及时反应出变化效果是如何实现的呢?请大N们赐教
      

  3.   

    可以通过OnChar,每改变一个字符,就发送你自定义的消息。void CMyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
    { AfxMessageBox("ddd");//这可以发送你自定义的消息 CEdit::OnChar(nChar, nRepCnt, nFlags);
    }
      

  4.   

    可以通过OnChar,每改变一个字符,就发送你自定义的消息。void CMyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
    { AfxMessageBox("ddd");//这可以发送你自定义的消息 CEdit::OnChar(nChar, nRepCnt, nFlags);
    }
      

  5.   

    每输入一个字符都要有改变的话,需要响应OnChar消息。用KeyDown不是太好。如果响应OnChar消息,有两种做法,第一种:这个EditBox是你继承出来的类,可以直接添加。
    第二种:将该Edit调用 SetOwner,这样它的Owner中就可以响应OnChar消息了。
      

  6.   

    to  hityct1 and coyersay 3Q frist.这个程序是其他同事写的,我现在要添加新的功能和解决其中的Bug错误。对了忘了说明一下,下面的GetParent()->SendMessage(UM_MYMESSAGE,....); 发送以后,输入焦点就不在派生的Edit文本框中了。
    我在派生的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们有没有办法解决?
      

  7.   

    响应EN_CHANGE通知、响应EN_KILLFOCUS通知,看你想要哪种。
      

  8.   

    to cnzdgs都试过了,发送自定义的消息以后,输入焦点就不在Edit文本框中了,我现在想要的就是我改变了文本框中的值以后,发送自定义的消息出去以后,输入焦点要能重新回到我的文本框中。
      

  9.   

    响应EN_CHANGE通知,用MoveWindow移动控件就可以了,焦点不会变。
      

  10.   

    to cnzdgz但是一发送自定义的消息以后,焦点就得不到了
      

  11.   

    这个程序的界面类似VB的界面,有一个控件的属性窗口和一个控件显示的窗口,我在属性窗口中改变某一个控件的坐标,在显示窗口中该对应控件就会发生相对应的变化。属性窗口是个类似VS.NET 20003上Properties窗口(几乎一样),有一个Item是设置控件的坐标的,我想要的是改变坐标的同时,显示窗口中显示出控件相应的变化。发送自定义的消息就是发送到显示窗口,让显示窗口中的控件发生改变(重绘OnPaint()操作)。就是这样。
      

  12.   


    你在sendmessage之后重新SetFocus一下
    因为你sendmessage的目的是改变另外控件的位置,这个焦点已经到了另外的控件上了
      

  13.   

    发送自定义消息如果用Send,可以在Send后再把焦点设回自己呀
      

  14.   

    SendMessage不会改变焦点,消息响应的代码是怎么写的?