一 按钮的使能与禁止
用ClassWizard的Member Variables为按钮定义变量,如:m_Button1;
m_Button1.EnableWindow(true); 使按钮处于允许状态
m_Button1.EnableWindow(false); 使按钮被禁止,并变灰显示
二 控件的隐藏与显示
用CWnd类的函数BOOL ShowWindow(int nCmdShow)可以隐藏或显示一个控件。
例1:
CWnd *pWnd;
pWnd = GetDlgItem( IDC_EDIT1 ); //获取控件指针,IDC_EDIT为控件ID号
pWnd->ShowWindow( SW_HIDE ); //隐藏控件
例2:
CWnd *pWnd;
pWnd = GetDlgItem( IDC_EDIT1 ); //获取控件指针,IDC_EDIT为控件ID号
pWnd->ShowWindow( SW_SHOW ); //显示控件
三 改变控件的大小和位置
用CWnd类的函数MoveWindow()或SetWindowPos()可以改变控件的大小和位置。
void MoveWindow(int x,int y,int nWidth,int nHeight);
void MoveWindow(LPCRECT lpRect);
第一种用法需给出控件新的坐标和宽度、高度;
第二种用法给出存放位置的CRect对象;
例:
CWnd *pWnd;
pWnd = GetDlgItem( IDC_EDIT1 ); //获取控件指针,IDC_EDIT1为控件ID号
pWnd->MoveWindow( CRect(0,0,100,100) ); //在窗口左上角显示一个宽100、高100的编辑控件
SetWindowPos()函数使用更灵活,多用于只修改控件位置而大小不变或只修改大小而位置不变的情况:
BOOL SetWindowPos(const CWnd* pWndInsertAfter,int x,int y,int cx,int cy,UINT nFlags);
第一个参数我不会用,一般设为NULL;
x、y控件位置;cx、cy控件宽度和高度;
nFlags常用取值:
SWP_NOZORDER:忽略第一个参数;
SWP_NOMOVE:忽略x、y,维持位置不变;
SWP_NOSIZE:忽略cx、cy,维持大小不变;
例:
CWnd *pWnd;
pWnd = GetDlgItem( IDC_BUTTON1 ); //获取控件指针,IDC_BUTTON1为控件ID号
pWnd->SetWindowPos( NULL,50,80,0,0,SWP_NOZORDER | SWP_NOSIZE ); //把按钮移到窗口的(50,80)处
pWnd = GetDlgItem( IDC_EDIT1 );
pWnd->SetWindowPos( NULL,0,0,100,80,SWP_NOZORDER | SWP_NOMOVE ); //把编辑控件的大小设为(100,80),位置不变
pWnd = GetDlgItem( IDC_EDIT1 );
pWnd->SetWindowPos( NULL,0,0,100,80,SWP_NOZORDER ); //编辑控件的大小和位置都改变
四 什么时候设定视中控件的初始尺寸?
我在CFormView的视中加入了一个编辑控件,在运行时使它充满客户区,当窗口改变大小时它也跟着改变。
改变控件尺寸可以放在OnDraw()函数中,也可放在CalcWindowRect()函数中,当窗口尺寸发生变化时,它们都将被执行,且CalcWindowRect()函数先于OnDraw()函数,下例是在CalcWindowRect()函数中修改控件尺寸。
重载VIEW类的CalcWindowRect函数,把设定控件的尺寸的语句加入这个函数中。
例:
void CMyEditView::CalcWindowRect(LPRECT lpClientRect, UINT nAdjustType)
{
// TODO: Add your specialized code here and/or call the base class
CFrameWnd *pFrameWnd=GetParentFrame(); //获取框架窗口指针
CRect rect;
pFrameWnd->GetClientRect(&rect); //获取客户区尺寸
CWnd *pEditWnd=GetDlgItem(IDC_MYEDIT); //获取编辑控件指针,IDC_MYEDIT为控件ID号
pEditWnd->SetWindowPos(NULL,0,0,rect.right,rect.bottom-50,SWP_NOMOVE | SWP_NOZORDER); //设定控件尺寸,bottom-50是为了让出状态条位置。
CFormView::CalcWindowRect(lpClientRect, nAdjustType);
}
五 单选按钮控件(Ridio Button)的使用
1、对单选按钮进行分组:
每组的第一个单选按钮设置属性:Group,Tabstop,Auto;其余按钮设置属性Tabstop,Auto。
如:
Ridio1、Ridio2、Ridio3为一组,Ridio4、Ridio5为一组
设定Ridio1属性:Group,Tabstop,Auto
设定Ridio2属性:Tabstop,Auto
设定Ridio3属性:Tabstop,Auto
设定Ridio4属性:Group,Tabstop,Auto
设定Ridio5属性:Tabstop,Auto
2、用ClassWizard为单选控件定义变量,每组只能定义一个。如:m_Ridio1、m_Ridio4。
3、用ClassWizard生成各单选按钮的单击消息函数,并加入内容:
void CWEditView::OnRadio1()
{
m_Ridio1 = 0; //第一个单选按钮被选中
}
void CWEditView::OnRadio2()
{
m_Ridio1 = 1; //第二个单选按钮被选中
}
void CWEditView::OnRadio3()
{
m_Ridio1 = 2; //第三个单选按钮被选中
}
void CWEditView::OnRadio4()
{
m_Ridio4 = 0; //第四个单选按钮被选中
}
void CWEditView::OnRadio5()
{
m_Ridio4 = 1; //第五个单选按钮被选中
}
4、设置默认按钮:
在定义控件变量时,ClassWizard在构造函数中会把变量初值设为-1,只需把它改为其它值即可。
如:
//{{AFX_DATA_INIT(CWEditView)
m_Ridio1 = 0; //初始时第一个单选按钮被选中
m_Ridio4 = 0; //初始时第四个单选按钮被选中
//}}AFX_DATA_INIT
六 旋转控件(Spin)的使用
当单击旋转控件上的按钮时,相应的编辑控件值会增大或减小。其设置的一般步骤为:
1、在对话框中放入一个Spin控件和一个编辑控件作为Spin控件的伙伴窗口,
设置Spin控件属性:Auto buddy、Set buddy integer、Arrow keys
设置文本控件属性:Number
2、用ClassWizard为Spin控件定义变量m_Spin,为编辑控件定义变量m_Edit,定义时注意要把m_Edit设置为int型。
3、在对话框的OnInitDialog()函数中加入语句:
BOOL CMyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_Spin.SetBuddy( GetDlgItem( IDC_EDIT1 ) ); //设置编辑控件为Spin控件的伙伴窗口
m_Spin.SetRange( 0, 10 ); //设置数据范围为0-10
return TRUE;
}
4、用ClassWizard为编辑控件添加EN_CHANGE消息处理函数,再加入语句:
void CMyDlg::OnChangeEdit1()
{
m_Edit = m_Spin.GetPos(); //获取Spin控件当前值
}
5、将SPIN控件的 “Set Bueey Integer”设置为TRUE。
七 程序结束时保存文件问题
在文档-视图结构中,用串行化自动保存文件在各种VC书上都有介绍。现在的问题是我不使用串行化,而是自己动手保存,当点击窗口的关闭按钮时,如何提示并保存文档。
用ClassWizard在文档类(CxxDoc)中添加函数CanCloseFrame(),再在其中加入保存文件的语句就可以了。
注:要保存的数据应放在文档类(CxxDoc)或应用程序类(CxxApp)中,不要放在视图类中。
例:
//退出程序
BOOL CEditDoc::CanCloseFrame(CFrameWnd* pFrame)
{
CFile file;
if(b_Flag) //b_Flag为文档修改标志,在修改文档时将其置为True
{
int t;
t=::MessageBox(NULL,"文字已经改变,要存盘吗?","警告",
MB_YESNOCANCEL | MB_ICONWARNING); //弹出提示对话框
if(t==0 || t==IDCANCEL)
return false;
if(t==IDYES)
{
CString sFilter="Text File(*.txt)|*.txt||";
CFileDialog m_Dlg(FALSE,"txt",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,(LPCTSTR)sFilter,NULL); //定制文件对话框
int k=m_Dlg.DoModal(); //弹出文件对话框
if(k==IDCANCEL || k==0)
return false;
m_PathName=m_Dlg.GetPathName(); //获取选择的文件路径名
file.Open(m_PathName,CFile::modeCreate | CFile::modeWrite);
file.Write(m_Text,m_TextLen); //数据写入文件
file.Close();
}
}
return CDocument::CanCloseFrame(pFrame);
}
分享到:
相关推荐
首先看看,这一行行的条目看起来都长得差不多,只是图片和文字不一样,没错,就是看中这一点,我们可以把一个条目做成一个组合控件,做为一个整体,这样不管你有几个条目,就写几个组合控件就行了。 步骤: 1.先建立...
Visual C#学习笔记光盘 简介:本书由浅入深地讲解Visual C# 2005编程知识,全书内容分为6篇,共27章,第一篇介绍Visual Studio 2005开发环境和C#基础,其中包括Visual C# 2005简介,C#语言基础,面向对象编程...
使用ListView时,有以下几个关键步骤: 1. **继承ListActivity**:如果你的类需要使用ListView,通常需要继承自ListActivity,而不是普通的Activity。 2. **布局文件**:为Activity创建XML布局文件,并包含一个...
这篇学习笔记主要涵盖了几个常见的控件:EditText、RadioGroup与RadioButton、CheckBox、Spinner、AutoCompleteTextView以及MultiAutoCompleteTextView,还包括了DatePicker和TimePicker的使用。 1. **EditText**:...
### Chrome UI框架学习笔记 #### 一、简介与概述 Chrome作为一款广受欢迎的浏览器,在其用户界面(UI)的设计上采用了一套独特的框架。本文档旨在深入探讨Chrome UI框架的基本概念、架构及其实现原理,尤其关注于...
文档可能涵盖了以下几个重要的知识点: 1. **安装与配置**:详细介绍了ArcGIS Engine的安装步骤和环境配置,包括注册组件、设置开发环境以及添加引用等。 2. **基本组件使用**:讲解了MapControl、SceneControl等...
这是我亲自一页页扫描下来的,花了好几个小时呢?希望大家好好不珍惜资源! “10分”不算贵了,而且下载资源评分后,资源分还会返还给你!!注意:是“评分”,不仅要有评论,而且要有评分,在评论的左上角有五个...
### ASP.NET 学习笔记 #### 一、ASP.NET 概述 ASP.NET 是一个用于构建 Web 应用程序的框架,由微软公司开发并维护。它基于公共语言运行库 (CLR) 和 .NET Framework,提供了强大的功能和高度灵活性,支持多种编程...
85个经典例子涵盖了以下几个主要的知识点: 1. **基础语法**:包括变量声明、数据类型、常量、运算符、流程控制语句(如If...Then...Else、For...Next、While...Wend等)以及函数和过程的使用。 2. **控件操作**:...
这份“十几万字前端学习笔记.pdf”文件中的内容,涵盖了前端开发的核心知识点,主要围绕HTML、CSS、JavaScript等基础技术,以及现代前端技术栈中的工具和框架,如Vue.js和Webpack。此外,还涉及了一些前端工程实践...
创建UserControl的过程通常包括以下几个步骤: 1. **新建UserControl**:在Visual Studio中,选择"项目" -> "添加新项",然后在模板列表中选择"UserControl"。这会生成一个新的.cs文件,其中包含一个空的User...
从提供的内容中,我们可以提炼出关于UniGUI的几个关键知识点: 1. UniGUI的定义与特点 UniGUI是一个统一的图形用户界面,它的目标是为所有使用Web浏览器的设备提供一致的用户体验。这意味着不论客户端设备的类型...
"VC++深入详解学习笔记" 本笔记详细介绍了VC++语言的开发特点,有助新手快速掌握VC++编程技巧。笔记涵盖了从Windows程序内部运行机制到MFC程序框架、消息映射机制、DC获取、菜单编程、对话框编程、图形绘制、文件...
其运作机制包括以下几个关键步骤: 1. **静态HTML与动态网页区别**:传统静态HTML页面在用户访问时,服务器直接返回已编写好的HTML代码,而ASP.NET页面(.aspx)则会在服务器端被编译执行,动态生成HTML代码后再...
转向ASP.NET部分,这是一项基于.NET Framework的Web应用程序开发技术,主要包含以下几个核心模块: 1. **ASP.NET Web Forms**:模拟传统桌面应用的事件驱动模型,通过控件和事件处理程序构建动态Web页面。 2. **...
### Struts2学习笔记之文件上传与Ajax开发 #### Struts2文件上传 **文件上传简介** 文件上传是Web应用中常见的功能之一,Struts2框架内置了对文件上传的支持,使得开发者能够轻松地实现这一功能。为了确保文件...
笔记可能包含了几个实际的编程项目,让读者有机会将所学知识应用于实际问题,如编写简单的GUI应用程序或系统工具。 九、学习资源与社区 介绍了一些学习C++和Visual C++的在线资源,如MSDN图书馆、Stack Overflow和...
MATLAB GUI主要由以下几个核心组件构成: 1. ** figure窗口**:这是MATLAB GUI的基本容器,所有图形和控件都包含在这个窗口内。 2. ** uicontrols**:这些是GUI中的控件,如按钮、文本框、滑块等,用户可以通过与...