mfc中引用自己的方法。。
各位大大,小弟是以前学JAVA,现在做MFC,请教个问题。
现在写了一个CComboBox,然后双击进去就进入了一个代码界面,现在我想使用这个控件的一个函数比如A();
然后我就CComboBox *c=(CComboxBox)GETWINDOW(控件ID);
c->A();
但是会报出那种强制异常。。现在已经确定是获得指针这段代码错误了。。
请问怎么办,如何调用到A()=.=,,不知道我说清楚没有
[最优解释]
CComboBox *c=(CComboxBox*)GetDlgItem(控件ID);
[其他解释]
(CComboxBox*)
[其他解释]
那么你需要有一个思路上的大转变:java中类和句柄是一个整体,比如JLabel。但是mfc中他们不是一个整体。
这一点可以这么说:class My : public CButton; 假设My有个ID 1314,通过GetDlgItem获取到的只能是CButton* 而不能是My*,这是与java的大区别。因为返回的这个CButton*是临时的,它只包含句柄,并不包含My的数据。所以,你要访问My,可以这么做,为1314关联一个变量,类型为My,之后通过这个变量访问My的方法。
[其他解释]
麻烦你说清楚,你是要在哪个类的哪个函数中调用这个按钮的方法?你可以用Classwizard为这个按钮绑定一个CButton成员变量。
[其他解释]
对于从CWnd继承而来的方法是可以使用的,但是自己继承控件写的新方法不能直接用。
CButton* btn = (CButton*) GetDlgItem(IDC_BTN);
ASSERT(btn); //如果btn为空,会触发断言
CString str;
btn->GetWindowText(str);
//其实,对于这些CWnd的方法,不必转换,可以这么用CWnd* pWnd = GetDlgItem(IDC_BTN); 后续一样
在mfc还要注意一点,java中String是unicode,但是mfc中CString分为ascii和unicode,你可以看看我写的转换。里面有2个转换多余了,看我自己的评论。
http://blog.csdn.net/zhoujielunzhimi/article/details/8082286
[其他解释]