MFC 自定义控件?

2024-05-02 22:42

1. MFC 自定义控件?

自定义控件的消息需要重载,绘制也要重载,OnPaint()或者是DrawItem(),要看你要自定义什么控件了。

MFC 自定义控件?

2. 在MFC编程中到底什么是控件的客户区

整个窗体一般分客户区和非客户区。
一般控件全部区域都是客户区(默认)
对话框,Frame等在Create过程中修改了此默认客户区大型。一般就是去除标题栏大小,去除四周边框(2个象素)的范围就是客户区。

3. MFC标签控件

afx_msg void FuncName(NMHDR* pNMHDR, LRESULT* pResult);

这个是WM_NOTIFY消息的处理函数的类型,见如下说明:
http://msdn.microsoft.com/en-us/library/749htf6k.aspx
你的这个void CSaleDlg::OnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult)

是处理Tab控件切换标签页的通知,一旦你鼠标或者其它操作切换了标签页,程序就会执行到这个函数。这个时候只是切换了标签,标签对应的下面的显示页没有切换,于是,你需要隐藏不显示的,而显示要显示的。
if(m_tabCurSel)
 {
  employeeDlg.ShowWindow(SW_SHOW);
  commodityDlg.ShowWindow(SW_HIDE);
 }
 else
 {
  employeeDlg.ShowWindow(SW_HIDE);
  commodityDlg.ShowWindow(SW_SHOW);
 }
 m_tabCurSel = 1 - m_tabCurSel;
tab标签页有序号,0开始的,m_tabCurSel表示当前序号,那个if语句就是查看m_tabCurSel 的值,如果是0就显示0标签对应的对话框,否则就是1标签。
看你这个处理方式,是只适合2个标签页的时候,即m_tabCurSel的值只会是0和1切换,所以m_tabCurSel = 1 - m_tabCurSel;就只是在0和1之间变动,要处理好应该
int curSel = m_tab.GetCurSel(); // 获取当前选择标签序号
switch(curSel)
{
    ...

}
m_tab假设是你为tab控件关联的控件变量。
*pResult = 0;这个是修改返回值:Your function must return TRUE if the notification message has been completely handled or FALSE if other objects in the command routing should have a chance to handle the message.

MFC标签控件

4. MFC中控件和类是什么关系啊?控件和用户添加类成员是同级关系吗?

MFC控件是由MFC类对象创建和控制.就像对话框由对话框类对象创建和控制一样.控件和用户添加类成员没有同不同同级关系问题.

5. mfc 界面控件

第9个是CListCtrl

mfc 界面控件

6. 如何用MFC编程可以实现在用户打开软件时可以设置界面控件的数目

1.采用动态创建的办法;2、如果控件数目不多,可以采用不需要的控件先隐臧,需要的控件先显示,我曾做过一个程序,窗口的同一个地方根据需要显示不同的控件,在对话框资源上这些控件是同时存在的,只是在程序运行的时候根据用户操作选择性的隐臧或显示一些控件。

7. MFC中标签控件的问题

里面有中文字符了。

MFC中标签控件的问题

8. MFC 单文档 控件相关问题

1 你用到了消息反射。父窗口将这个通知消息,首先反射回子窗口进行处理,如果子窗口
处理了这个消息,返回为TRUE,父窗口则不处理此消息

子窗体重载OnChildNotify函数,返回false,父窗体就能够处理这个消息.

如果你想子窗体和父窗体同时处理,用ON_CONTROL_REFLECT_EX映射消息