MFC通用控件(控件就是子窗口)

创建子窗口可用CreateWindowEx函数,lpClassName是定义窗口的类,若不是子窗口就用RegisterClass注册的类。否则就用(Class):

Class用于创建的控件
Button按钮控件、单选钮控件、复选框控件、分组框控件
ComboBox组合框控件
Edit编辑框控件
ListBox列表框控件
Static静态文本控件

创建子窗口时风格和每个类的风格可以联合使用

WS_CHILD|WS_VISIBLE|LBS_STANDARD|WS_HSCROLL   (LBS_STANDARD是ListBox类的风格

用CreateWindowEx函数可以创建任何窗口和子窗口,而用MFC的相应类也可以创建任何窗口和子窗口(如CListBox的Create成员函数就可以创建列表框)

如下是一个先用CreateWindowEx创建了一个用RegisterClass注册窗口类的窗口,之后又用CreateWindowEx基于ListBox类的子窗口

hwnd = CreateWindowEx("CustomWnd","Win32App",WS_CAPTION|WS_OVERLAPPEDWINDOW|WS_SYSMENU,50,50,500,500,NULL,NULL,wndcls.hInstance,NULL);

CreateWindowEx("ListBox",NULL,WS_CHILD|WS_VISIBLE|LBS_STANDARD|WS_HSCROLL,0,0,200,200,hwnd,NULL,wndcls.hInstance,NULL);//窗口风格的组合

 

 

 

可通过MSDN查到相关子窗口的信息,如样式,支持的事件和控制消息等。。。。

1.输入:CreateWindowEx

2.CreateWindowEx Function::windows management

这样就可以看到创建子窗口时支持的类,进入某个类后就可看到子窗口支持的 Messages Notifications

Messages(程序用来控制子窗口的消息)                                                                            重点

(程序发送给子窗口的,程序用于控制子窗口的消息)

win32汇编用用SendMessage函数直接发送,而MFC中用类的成员函数实现对子窗口的控制。

Notifications(WM_COMMAND消息的高16位的通知码)                                                                 重点

(子窗口发送给程序的消息,消息大多数以WM_COMMAND发送,高16位就是通知码,MSDN中列出了通知码

win32汇编中在窗口过程中直接监控WM_COMMAND消息,而在MFC中通过定义消息映射宏(指用Create创建的控件)(若是对话框上的控件在编辑区中右键控件并选择:Add Event Handle)可用来监控。

 

一:静态文本控件(Static Text)

静态文本控件是一种单向交互的控制,用于显示数据,但是不接受输入。

1.创建基于CStatic类的子窗口:

1)用工具箱创建(只能用于对话框上)Static Text

2)用CStatic类的Create函数创建

在.h文件中声明

CStatic test;

在成员函数中调用Create函数

test.Create("jiangkai",WS_CHILD|WS_VISIBLE|SS_CENTER,CRect(20,40,200,100),this,123);

2.通过Has a关系利用静态文本控件实现“文本显示功能”,“显示图标功能”,“显示位图功能”,“点击事件”

若是用用工具箱创建的静态文本控件,需要先为该控件添加变量之后才能实现Has a关系。

文本显示功能:

test.SetWindowText("快乐");

显示图标功能:

test.ModifyStyle(0,SS_ICON); //修改按钮风格

test.SetIcon(AfxGetApp()->LoadIcon(IDI_ICON1)); //加载图标

显示位图功能

1)用工具箱创建(只能用于对话框上)Static Text

m_Static2.ModifyStyle(0,SS_BITMAP); //修改按钮风格

m_Static2.SetBitmap(LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1))); //设置位图

函数原型:HBITMAP LoadBitmap(HINSTANCE hInstance, LPCTSTR lpBitmapName);

    参数:

    hlnstance:指向模块实例的句柄。该模块的可执行文件包含了要加载的位图。

    lpBitmapName:指向字符串(以NULL结束)批指针。该字符串包含了要加载的位图资源名称。另外一种方式就是该参数可以由低位字是资源标识符、高位字为0位形式组成。可以使用宏MAKEINTRESOURCE来创建这个参数值。

2)用CStatic类的Create函数创建

test.Create("JK",SS_BITMAP|WS_CHILD|WS_VISIBLE,CRect(20,40,200,100),this,123);//样式不能加SS_CENTER

test.ModifyStyle(0,SS_BITMAP); //修改按钮风格

test.SetBitmap(LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1))); //设置位图

点击事件(其他事件参见MSDN)

1)用工具箱创建(只能用于对话框上)Static Text

在编辑区中右键Static Text控件并选择:Add Event Handle

2)用CStatic类的Create函数创建

test.Create("jiangkai",WS_CHILD|WS_VISIBLE|SS_CENTER|SS_NOTIFY,CRect(20,40,200,100),this,WM_USER+123);//style中必须有SS_NOTIFY

并添加消息映射宏

ON_CONTROL(STN_CLICKED,WM_USER+123,jk);//并最终会以WM_COMMAND消息发送给程序

 

二:编辑框控件(Edit Box)

编辑框控件是一个可以从键盘输入和编辑的窗口,在编辑框控件中可以进行输入、复制、剪切、粘贴、删除等操作。

1.创建基于CEdit类的子窗口:

1)用工具箱创建(只能用于对话框上)Edit Box

2)用CEdit类的Create函数创建

在.h文件中声明

CEdit test;

在成员函数中调用Create函数

test.Create(WS_CHILD|WS_VISIBLE|SS_CENTER,CRect(20,20,200,10),this,123);

2.通过Has a关系利用编辑框控件实现“设置编辑框控件内容”,“获得编辑框内容”,“撤消编辑框上一次操作”

设置编辑框控件内容、获得编辑框内容

CString temp;
m_Edit4.GetWindowTextA(temp);
test.SetWindowTextA(temp);

撤消编辑框上一次操作

m_Edit4.Undo();

 

三:列表框控件(List Box)

列表框控显示了一个可选择的列表,可以通过列表框来查看或选择数据项,而且列表的项数是灵活多变的。

1.创建基于CListBox类的子窗口:

1)用工具箱创建(只能用于对话框上)List Box

2)用CListBox类的Create函数创建

在.h文件中声明

CListBox test;

在成员函数中调用Create函数

test.Create(WS_CHILD|WS_VISIBLE|LBS_STANDARD|WS_HSCROLL,CRect(0,0,200,200),this,WM_USER+123);

2.通过Has a关系利用编辑框控件控件实现“向列表框控件插入数据”,“在列表框查找数据”,“处理列表框控件的LBN_DBCLK事件”,“实现列举文件功能”

向列表框控件插入数据

m_List.AddString("凌日"); //插入数据

m_List.AddString("凌中天");

m_List.AddString("凌云");

m_List.AddString("凌壮志");

 

在列表框查找数据

m_List.SelectString(0,"凌云"); //查找数据

 

处理列表框控件的LBN_DBCLK事件

int pos = m_List.GetCurSel(); //获取当前选中项索引

CString str;

m_List.GetText(pos,str); //获取指定索引项的数据

m_Static.SetWindowText(str);

 

实现列举文件功能

m_List.ResetContent(); //删除所有数据

m_List.Dir(DDL_DIRECTORY|DDL_SYSTEM,"d://*.*"); //列举D盘文件目录

 

四:组合框控件(Combo Box)

组合框控件(Combo Box)结合了编辑框和列表框的特点,既可以进行输入,也可以在列表框组成部分选择一项。

1.创建基于CComboBox类的子窗口:

1)用工具箱创建(只能用于对话框上)Combo Box

2)用CComboBox类的Create函数创建

在.h文件中声明

CComboBox test;

在成员函数中调用Create函数

test.Create(WS_CHILD|WS_VISIBLE|CBS_DROPDOWN,CRect(20,20,200,80),this,WM_USER+123);

2.通过Has a关系利用组合框控件实现“添加数据和插入数据”,“删除组合框数据”,“显示组合框当前数据”,“列举磁盘目录”

“添加数据和插入数据”

test.AddString("清明时节雨");

test.AddString("清明时节雨");

test.InsertString(0,"欲断魂");

 

“删除组合框数据”

test.ResetContent(); //删除数据

 

“显示组合框当前数据”

CString str;

m_Combo3.GetWindowText(str); //获得组合框控件当前显示数据

m_Button.SetWindowText(str);

 

“列举磁盘目录”

test.Dir(DDL_DRIVES|DDL_EXCLUSIVE,""); //列举磁盘目录

 

五:按钮控件(Button)

按钮控件(Button)可以接受用户的命令,通过单击或双击来执行某一条命令。

1.创建基于CButton类的子窗口:

1)用工具箱创建(只能用于对话框上)Button

2)用CButton类的Create函数创建

在.h文件中声明

CButton test;

在成员函数中调用Create函数(按钮  &  复选框  &  单选钮 & 分组框)

test.Create("JK",WS_CHILD|WS_VISIBLE|BS_NOTIFY|BS_PUSHBUTTON,CRect(20,20,200,80),this,WM_USER+123);

BS_PUSHBUTTON为按钮BS_AUTOCHECKBOX 为复选框,BS_AUTORADIOBUTTON 为单选钮BS_GROUPBOX 为分组框

2.通过Has a关系利用按钮控件实现“按钮显示位图功能”,“按钮显示图标功能”,“按钮显示鼠标图象功能”,“选中按钮功能”

“按钮显示位图功能”

m_Button1.ModifyStyle(0,BS_BITMAP); //设置Bitmap属性

m_Button1.SetBitmap(LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1))); //设置位图

 

“按钮显示图标功能”

m_Button2.ModifyStyle(0,BS_ICON); //设置Icon属性

m_Button2.SetIcon(AfxGetApp()->LoadIcon(IDI_ICON1)); //设置图标

 

“按钮显示鼠标图象功能”

m_Button3.ModifyStyle(0,BS_ICON); //设置Icon属性

m_Button3.SetCursor(AfxGetApp()->LoadCursor(IDC_CURSOR1)); //设置鼠标图像

 

“选中按钮功能”                                        重点

CButton* m_button = (CButton*)this->GetDlgItem(IDC_CHECK1);

m_button->SetCheck(TRUE);

m_button = (CButton*)GetDlgItem(IDC_RADIO1);

m_button->SetCheck(TRUE);

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值