MFC中是否每个一控件都要有一个类与其关联?
控件怎么与类关联?请详细的说一下,谢谢了。
俺用的编译器是VS2005
控件怎么与类关联?请详细的说一下,谢谢了。
俺用的编译器是VS2005
解决方案 »
- 一个没有更改代码就解决了的问题,不知道是什么原因?求教……
- 多线程与定时器问题
- PCA SVM 人脸识别
- 如何让工具栏停靠在指定区域?
- 将十进制数据转换为十六进制?
- 请教1个问题,我使用Shell_NotifyIcon 函数为程序制作了1个任务栏图标,但如何在关闭程序时把它去掉呢
- 大侠来,帮忙下。。
- 如何动态改变ON_NOTIFY消息中的处理函数?
- 我运行了http://www.codeguru.com/的driver.dll这个例子,在桌面上出现了个图标,怎么也删不掉?
- 在ListView中怎么知道有没有按下Ctrl,Alt,Shift等换档键? 好象Home 和Ctrl+Home是一样的?(在OnKeyDown(...)里)
- 如何使鼠标移动的速度和滚动条成正比???
- VS2005下读取字符串资源如何禁用UNICODE转换
所有以CWnd派生出来的对话框、窗口,都用DoDataExchange来与控件资源关联。
就像下面代码,IDC_BUTTON_GO这些就是资源ID,btnGO是一个按钮的CButton类的实例void CSYSL2ToolkitDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSYSL2ToolkitDlg)
DDX_Control(pDX, IDC_BUTTON_GO, m_btnGO);
DDX_Control(pDX, IDC_EDIT_CODE, m_editCode);
DDX_Control(pDX, IDC_BUTTON_TOPMOST, m_btnTopmost);
//}}AFX_DATA_MAP
DDX_Control(pDX, IDC_BUTTON_INFO, m_btnInfo);
DDX_Control(pDX, IDC_BUTTON_SET, m_btnSet);
DDX_Control(pDX, IDC_BUTTON_R1, m_btnR1);
DDX_Control(pDX, IDC_BUTTON_R2, m_btnR2);
}
例如还可以这样调取并使用一个控件CButton* pbtn = (CButton*)GetDlgItem(IDC_BUTTON_GO);
if(pbtn && pbtn->GetSafeHwnd()){
pbtn->SetWindowText("我是按钮");
}
每个窗口(控件)都必须是某一个已经注册的WndClass类型。
窗口(控件)可以与MFC中的CWnd类或其派生类相关联,但不是必须的。关联实际上是修改窗口(控件)的WindowProc,通过窗口句柄找出类对象指针,然后调用类的WindowProc虚函数。可以利用CWnd类的SubclassWindow函数把一个类对象与窗口建立关联;如果使用CWnd类或其派生类的Create或CreateEx函数来创建窗口(空间),会自动建立关联。
如果要调整,只要在声明变量时选中“control”那个复选框即可
这句看懂了,用基类的指针去调用子类的方法,这句让我明白了,资源也是类,继承于它们自己的基类。
可以使用基类的指针去调用子类的方法,来操作控件
我说的类,应该是C++的类,因为我对MFC还不是很了解,不知道wndclss是何物。
不过您的说法让我验证了自己的理解。这个说法和上面的基本上一样,不过,怎么做控件变量?好像没有上面说的指针方法方便。
3楼说,DDX_Control(pDX, IDC_BUTTON_INFO, m_btnInfo); 这个就是与变量关联的代码吗? 这几个参数怎么讲?
你可以参考MSDN中RegisterClass、CreateWindow、SetWindowLong、SetClassLong等函数的说明。
以上所提到的类,与C++中的class是不同概念。
在给控件关联变量时,可以选Value,Control两类,Control所对应的变量类型就时MFC为该控件封装的控件类,用这个控件类的就可以使用控件类的方法啦,
你可以在点控件的时候,看他出现什么样的提示,假如是Button 则对应的类为CButoon
其它同理.