`
strong_fee
  • 浏览: 178778 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

几个控件的学习笔记

阅读更多

    按钮的使能与禁止
ClassWizardMember 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控件位置;cxcy控件宽度和高度;
nFlags
常用取值:
SWP_NOZORDER
:忽略第一个参数;
SWP_NOMOVE
:忽略xy,维持位置不变;
SWP_NOSIZE
:忽略cxcy,维持大小不变;
例:
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、对单选按钮进行分组:
每组的第一个单选按钮设置属性:GroupTabstopAuto;其余按钮设置属性TabstopAuto

如:
Ridio1
Ridio2Ridio3为一组,Ridio4Ridio5为一组
设定Ridio1属性:GroupTabstopAuto
设定Ridio2属性:TabstopAuto
设定Ridio3属性:TabstopAuto

设定Ridio4属性:GroupTabstopAuto
设定Ridio5属性:TabstopAuto

2、用ClassWizard为单选控件定义变量,每组只能定义一个。如:m_Ridio1m_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 buddySet buddy integerArrow keys
设置文本控件属性:Number

2、用ClassWizardSpin控件定义变量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);
}

分享到:
评论

相关推荐

    Android自定义控件之组合控件学习笔记分享

    首先看看,这一行行的条目看起来都长得差不多,只是图片和文字不一样,没错,就是看中这一点,我们可以把一个条目做成一个组合控件,做为一个整体,这样不管你有几个条目,就写几个组合控件就行了。 步骤: 1.先建立...

    Visual C#学习笔记光盘

    Visual C#学习笔记光盘 简介:本书由浅入深地讲解Visual C# 2005编程知识,全书内容分为6篇,共27章,第一篇介绍Visual Studio 2005开发环境和C#基础,其中包括Visual C# 2005简介,C#语言基础,面向对象编程...

    Android学习笔记之常用控件

    使用ListView时,有以下几个关键步骤: 1. **继承ListActivity**:如果你的类需要使用ListView,通常需要继承自ListActivity,而不是普通的Activity。 2. **布局文件**:为Activity创建XML布局文件,并包含一个...

    android学习笔记之一常用控件.doc

    这篇学习笔记主要涵盖了几个常见的控件:EditText、RadioGroup与RadioButton、CheckBox、Spinner、AutoCompleteTextView以及MultiAutoCompleteTextView,还包括了DatePicker和TimePicker的使用。 1. **EditText**:...

    chrome ui 框架学习笔记

    ### Chrome UI框架学习笔记 #### 一、简介与概述 Chrome作为一款广受欢迎的浏览器,在其用户界面(UI)的设计上采用了一套独特的框架。本文档旨在深入探讨Chrome UI框架的基本概念、架构及其实现原理,尤其关注于...

    ArcGis Engine 学习笔记

    文档可能涵盖了以下几个重要的知识点: 1. **安装与配置**:详细介绍了ArcGIS Engine的安装步骤和环境配置,包括注册组件、设置开发环境以及添加引用等。 2. **基本组件使用**:讲解了MapControl、SceneControl等...

    Eclipse插件开发 学习笔记 第一篇 开发基础(01-05).rar

     这是我亲自一页页扫描下来的,花了好几个小时呢?希望大家好好不珍惜资源! “10分”不算贵了,而且下载资源评分后,资源分还会返还给你!!注意:是“评分”,不仅要有评论,而且要有评分,在评论的左上角有五个...

    asp.net学习笔记

    ### ASP.NET 学习笔记 #### 一、ASP.NET 概述 ASP.NET 是一个用于构建 Web 应用程序的框架,由微软公司开发并维护。它基于公共语言运行库 (CLR) 和 .NET Framework,提供了强大的功能和高度灵活性,支持多种编程...

    VB例子+学习笔记

    85个经典例子涵盖了以下几个主要的知识点: 1. **基础语法**:包括变量声明、数据类型、常量、运算符、流程控制语句(如If...Then...Else、For...Next、While...Wend等)以及函数和过程的使用。 2. **控件操作**:...

    十几万字前端学习笔记.pdf

    这份“十几万字前端学习笔记.pdf”文件中的内容,涵盖了前端开发的核心知识点,主要围绕HTML、CSS、JavaScript等基础技术,以及现代前端技术栈中的工具和框架,如Vue.js和Webpack。此外,还涉及了一些前端工程实践...

    head first C#学习笔记-构建动态控件(用UserControl)

    创建UserControl的过程通常包括以下几个步骤: 1. **新建UserControl**:在Visual Studio中,选择"项目" -> "添加新项",然后在模板列表中选择"UserControl"。这会生成一个新的.cs文件,其中包含一个空的User...

    UniGui 学习笔记.pdf

    从提供的内容中,我们可以提炼出关于UniGUI的几个关键知识点: 1. UniGUI的定义与特点 UniGUI是一个统一的图形用户界面,它的目标是为所有使用Web浏览器的设备提供一致的用户体验。这意味着不论客户端设备的类型...

    VC++深入详解学习笔记

    "VC++深入详解学习笔记" 本笔记详细介绍了VC++语言的开发特点,有助新手快速掌握VC++编程技巧。笔记涵盖了从Windows程序内部运行机制到MFC程序框架、消息映射机制、DC获取、菜单编程、对话框编程、图形绘制、文件...

    Asp.net北大青鸟学习笔记

    其运作机制包括以下几个关键步骤: 1. **静态HTML与动态网页区别**:传统静态HTML页面在用户访问时,服务器直接返回已编写好的HTML代码,而ASP.NET页面(.aspx)则会在服务器端被编译执行,动态生成HTML代码后再...

    Visual c#学习笔记

    转向ASP.NET部分,这是一项基于.NET Framework的Web应用程序开发技术,主要包含以下几个核心模块: 1. **ASP.NET Web Forms**:模拟传统桌面应用的事件驱动模型,通过控件和事件处理程序构建动态Web页面。 2. **...

    struts2学习笔记黑马程序员

    ### Struts2学习笔记之文件上传与Ajax开发 #### Struts2文件上传 **文件上传简介** 文件上传是Web应用中常见的功能之一,Struts2框架内置了对文件上传的支持,使得开发者能够轻松地实现这一功能。为了确保文件...

    Visual C++程序设计学习笔记.rar

    笔记可能包含了几个实际的编程项目,让读者有机会将所学知识应用于实际问题,如编写简单的GUI应用程序或系统工具。 九、学习资源与社区 介绍了一些学习C++和Visual C++的在线资源,如MSDN图书馆、Stack Overflow和...

    matlabGUI学习笔记配套程序

    MATLAB GUI主要由以下几个核心组件构成: 1. ** figure窗口**:这是MATLAB GUI的基本容器,所有图形和控件都包含在这个窗口内。 2. ** uicontrols**:这些是GUI中的控件,如按钮、文本框、滑块等,用户可以通过与...

Global site tag (gtag.js) - Google Analytics