【转】第六章 对话框编程(1)
来源:互联网 发布:一分钟59秒什么梗 知乎 编辑:程序博客网 时间:2024/05/16 14:41
1,知道如何创建一个单文档的App Wizard
2,知道C++ 类、函数重载等简单知识
3,知道如何给View类或者Doc文档添加成员变量
4,会用MFC的IDE调试工具最好,那么本文的程序您可以copy去调试
5,知道如何为某个框架类添加虚函数或消息处理函数
1,动态创建按钮
1)增加全局变量 CButton m_btn;
2)在需要创建的地方
//ID号123可以随意改变
if(!m_btn.m_hWnd)
m_btn.Create("维新",BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD,CRect(0,0,100,100),this,123);
else
m_btn.DestroyWindow();
2,复制控件
在dlg上添加控件时,按住ctrl键,拖动就可以复制一模一样的控件
3,控件对齐
在对话框上多个控件对齐,可以用layout菜单或者左下角toolbar
4,动态编辑static静态文本框
CString str;
if(GetDlgItem(IDC_NUMBER1)->GetWindowText(str),str=="Number1:")
GetDlgItem(IDC_NUMBER1)->SetWindowText("数值1:");
else
GetDlgItem(IDC_NUMBER1)->SetWindowText("Number1:");
要让static静态文本框响应消息,需要复选上notify选项
5,Edit文本框
获取/设置文本内容
1)方法1
char ch[10];
GetDlgItem(IDC_EDIT1)->GetWindowText(ch1,10);
GetDlgItem(IDC_EDIT3)->SetWindowText(itoa(atoi(ch1),ch1,10));
2)方法2
GetDlgItemText(IDC_EDIT1,ch1,10);
SetDlgItemText(IDC_EDIT3,itoa(atoi(ch1),ch1,10));
3)方法3
SetDlgItemInt(IDC_EDIT3,GetDlgItemInt(IDC_EDIT1));//对整型数字的字符串有用
4)关联变量法
对每个Edit控件关联一个变量,设置后记得用UpdateData()
对于显示数字类的文本框,可以定义value和control两种类型变量
DoDataExchange() called by the framework to exchange and validate dialog data
The framework automatically calls UpdateData with bSaveAndValidate set to FALSE when a modal dialog box is created in the default implementation of CDialog::OnInitDialog.
5)利用WM_GETTEXT消息处理获取文本
char ch1[10];
可以用以下四种方法(m_edit1为关联的控制型变量)
::SendMessage(GetDlgItem(IDC_EDIT1)->m_hWnd,WM_GETTEXT,10,(LPARAM)ch1);
::SendMessage(m_edit1.m_hWnd,WM_GETTEXT,10,(LPARAM)ch1);
GetDlgItem(IDC_EDIT1)->SendMessage(WM_GETTEXT,10,(LPARAM)ch1);
m_edit1.SendMessage(WM_GETTEXT,10,(LPARAM)ch1);
利用WM_SETTEXT消息处理设置文本
m_edit3.SendMessage(WM_SETTEXT,0,(LPARAM)ch3);
6)直接对对话框控件进行消息发送
SendDlgItemMessage(IDC_EDIT1,WM_GETTEXT,10,(LPARAM)ch1);//获取文本
SendDlgItemMessage(IDC_EDIT3,WM_SETTEXT,0,(LPARAM)ch3);//设置文本
SendDlgItemMessage(IDC_EDIT3,EM_SETSEL,0,-1);
7)利用EM_GETSEL,EM_SETSEL的消息处理
6,对话框收缩
点击"收缩<<"对话框收缩,点击"扩展>>"则扩展, 请看例子代码
7,多个edit框用Enter键切换的方法,三种方法
1)捕获键盘消息,在消息函数中处理(未提供)
2)修改Edit的窗口过程:自己写窗口过程替代原来的窗口过程(比较麻烦的方法)
(1)定义窗口过程类型变量
WNDPROC prevProc;
(2)定义窗口过程函数
LRESULT CALLBACK WinSunProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam )
{
if(uMsg==WM_CHAR && wParam==0x0d)//如果是回车
{
//::SetFocus(::GetNextWindow(hwnd,GW_HWNDNEXT));//获取下一窗口句柄方法一
//SetFocus(::GetWindow(hwnd,GW_HWNDNEXT));//方法二
SetFocus(::GetNextDlgTabItem(::GetParent(hwnd),hwnd,FALSE));//方法三
return 1;
}
else
return prevProc(hwnd,uMsg,wParam,lParam);
}
(3)添加WM_INITDIALOG对应的函数
(4)在OnInitDialog中添加
prevProc=(WNDPROC)SetWindowLong(GetDlgItem(IDC_EDIT1)->m_hWnd,GWL_WNDPROC,(LONG)WinSunProc);
(5)注意 edit控件 MultiLine复选属性选/不选的不同
SetWindowLong changes an attribute of the specified window.
3)在OnOK(default button对应的函数)
GetFocus()->GetNextWindow()->SetFocus();//注意最后一个窗口时要判断,不然获取出错
GetFocus()->GetWindow(GW_HWNDNEXT)->SetFocus();//注意同上
GetNextDlgTabItem(GetFocus())->SetFocus();
注意: 对话框初始的OK的ID号为IDOK,即使删除按钮(OnOk函数存在),依然会响应OnOk函数
欢迎以任何形式转载本文,只要对您有用
欢迎给我来信 webbery (at) sohu (dot) com (分别用@,.替换at,dot)
韦伯Blog: http://webbery.tianyablog.com参考书目和网站: (1)孙鑫VC++视频 (2)1-6章主要参考: hbyufan的BLog (3)11-20章主要参考: songpeng的Blog
- 【转】第六章 对话框编程(1)
- 第六章 编程练习(1-5)
- 【转】第七章 对话框编程(2)
- 《.net编程先锋C#》第六章 控制语句(转)
- 转:Windows Shell 编程 第六章
- 编程珠玑(2)第六章笔记
- 读书笔记---c专家编程(第六章)
- (九十一)第六章编程练习
- Java编程思想(第六章)
- 第六章 编程练习(6-9)
- 编程珠玑第六章
- 编程珠玑第六章
- 第六章编程题
- MFC编程入门--对话框(1)
- 对话框编程(一)
- Windows Shell 编程 第六章
- Windows Shell 编程 第六章
- Windows Shell 编程 第六章
- C++常见问题分析
- Symbian SDK SN
- JavaScript 初级教程
- iPhone 4G 的工程样机
- C#字符串学习经验
- 【转】第六章 对话框编程(1)
- LINUX 信号之我见
- 一些常用的GIS开源库
- [python]重定向输出
- Apt-get
- 【转】第七章 对话框编程(2)
- 愿LAMP一路走好
- JesperReport应用系列之入门篇1
- 【转】第八章 MFC中指针的获取