模拟改变另外程序的ComboBox选项的问题。。。。
我在自己的程序里,获得另外一个运行的exe的窗口控件combox的句柄,变量名为hwnd ,
然后动态更改它的当前选项:
CComboBox ComboBox ;
ComboBox.Attach ( hwnd ) ;
ComboBox.SetCurSel ( 6 ) ;
ComboBox.Detach ();
这时combox控件显示为我指定的选项,但是当程序继续运行时,我发现combox控件真实的当前选项仍然是从前的!
我做的代码的效果只是让comboBox的当先选项“看起来”像是更新了。但实际上并没有更新。
另外,我用如下方法:
int index = 6;
PostMessage ( hwnd , CB_SETCURSEL , (WPARAM) index,(LPARAM) 0) ;
效果同上,都没有真正更改comboBox真实的当前选项。
不知道问题出在哪里?请高人不吝指教,不胜感激!
问题点数:100、回复次数:8Top
1 楼lg2001(万人迷)回复于 2004-12-03 08:35:08 得分 30
最后一个参数应该有吧,这是我加一条选项的代码
pWnd->SendMessage(CB_ADDSTRING,0,(LPARAM)(LPCSTR)m_fval);Top
2 楼lg2001(万人迷)回复于 2004-12-03 08:38:26 得分 0
嗯,又看了一下MSDN,最后一个参数是没有,试试用SendMessage发送吧Top
3 楼changpei(我的博客:http:\\changpei.tianyablog.com)回复于 2004-12-03 08:54:33 得分 40
应该不是SendMessage或者PostMessage的原因。楼主,可以试试ComboBox.UpdataDate(true)吗?
然后用MessageBox()吧当前选项的CString值弄出来看看。Top
4 楼changpei(我的博客:http:\\changpei.tianyablog.com)回复于 2004-12-03 09:00:45 得分 0
还有,你的(WPARAM) index中,index值不能超出最大的值。Top
5 楼changpei(我的博客:http:\\changpei.tianyablog.com)回复于 2004-12-03 09:10:53 得分 0
CString str;
GetLbText(GetCurSel(), str);
MessageBox(str);Top
6 楼springland()回复于 2004-12-03 13:57:48 得分 0
先感谢 lg2001(万人迷) 和 changpei(作最有气魄的诗人。))
经过
CString str;
ComboBox.GetLBText(ComboBox.GetCurSel(), str)
之后,str里面的确是改变后的字串。
但在响应那个对话框IDOK之后,对话框里取得的 combobox变量却仍然是以前的,没有改变过来!
我依次试过
ComboBox.UpdateData(true)
PostMessage ( hwnd,CBN_CLOSEUP ,0,0 ) ; //hwnd是comboBox窗口句柄。
PostMessage ( hwnd,CBN_SELCHANGE ,0,0 ) ;
PostMessage ( hwnd,CBN_SELENDOK ,0,0 ) ;
都不行!
希望高人继续指点迷津。
Top
7 楼springland()回复于 2004-12-03 14:13:46 得分 0
上面写错了。
应该是:
ComboBox.PostMessage ( WM_COMMAND , MAKELONG(ComboBox.GetDlgCtrlID(), CBN_CLOSEUP),(LPARAM)ComboBox.m_hWnd ) ;
ComboBox.PostMessage ( WM_COMMAND , MAKELONG(ComboBox.GetDlgCtrlID(), CBN_SELCHANGE),(LPARAM)ComboBox.m_hWnd ) ;
ComboBox.PostMessage ( WM_COMMAND , MAKELONG(ComboBox.GetDlgCtrlID(), CBN_SELENDOK),(LPARAM)ComboBox.m_hWnd ) ;
Top
8 楼ncucf(ncu晨风)回复于 2004-12-03 14:21:14 得分 30
呵呵,这个问题,你可以从另一个角度想想!
看对方是靠什么捕捉combobox变化的,我猜想它90%不是用GetLbText来获得更新的,也许是用edit的anchange响应处理呢!
就像你sendmessage一个WM_SETTEXT给记事本,它也不知道内容发生了变化,要提示保存一样!
首先你要知道远程程序是如何获知变化,已经如何处理的!Top




