VC学习笔记1:按钮的使能与禁止

用ClassWizard的Member Variables为按钮定义变量,如:m_Button1;

m_Button1.EnableWindow(true); 使按钮处于允许状态
m_Button1.EnableWindow(false); 使按钮被禁止,并变灰显示

VC学习笔记2:控件的隐藏与显示

用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 );     //显示控件

以上方法常用于动态生成控件,虽说用控件的Create函数可以动态生成控件,但这种控件很不好控制,所以用隐藏、显示方法不失为一种替代手段。

VC学习笔记3:改变控件的大小和位置

用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 );     //编辑控件的大小和位置都改变
以上方法也适用于各种窗口。

VC学习笔记4:什么时候设定视中控件的初始尺寸?

我在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);
}

VC学习笔记5:单选按钮控件(Ridio Button)的使用

一、对单选按钮进行分组:
每组的第一个单选按钮设置属性: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

二、用ClassWizard为单选控件定义变量,每组只能定义一个。如:m_Ridio1、m_Ridio4。

三、用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;     //第五个单选按钮被选中
}

四、设置默认按钮:
在定义控件变量时,ClassWizard在构造函数中会把变量初值设为-1,只需把它改为其它值即可。
如:
//{{AFX_DATA_INIT(CWEditView)
m_Ridio1 = 0;     //初始时第一个单选按钮被选中
m_Ridio4 = 0;     //初始时第四个单选按钮被选中
//}}AFX_DATA_INIT

VC学习笔记6:旋转控件(Spin)的使用

当单击旋转控件上的按钮时,相应的编辑控件值会增大或减小。其设置的一般步骤为:
一、在对话框中放入一个Spin控件和一个编辑控件作为Spin控件的伙伴窗口,
设置Spin控件属性:Auto buddy、Set buddy integer、Arrow keys
设置文本控件属性:Number

二、用ClassWizard为Spin控件定义变量m_Spin,为编辑控件定义变量m_Edit,定义时注意要把m_Edit设置为int型。

三、在对话框的OnInitDialog()函数中加入语句:
BOOL CMyDlg::OnInitDialog() 
{
     CDialog::OnInitDialog();
    
     m_Spin.SetBuddy( GetDlgItem( IDC_EDIT1 ) );     //设置编辑控件为Spin控件的伙伴窗口
     m_Spin.SetRange( 0, 10 );     //设置数据范围为0-10
     return TRUE;
}

四、用ClassWizard为编辑控件添加EN_CHANGE消息处理函数,再加入语句:
void CMyDlg::OnChangeEdit1() 
{
     m_Edit = m_Spin.GetPos();     //获取Spin控件当前值
}

OK!

VC学习笔记7:程序结束时保存文件问题

在文档-视图结构中,用串行化自动保存文件在各种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);
}

VC学习笔记8:UpdateData()

对于可以接收数据的控件,如编辑控件来说,UpdateData()函数至关重要。当控件内容发生变化时,对应的控件变量的值并没有跟着变化,同样,当控件变量值变化时,控件内容也不会跟着变。
UpdateData()函数就是解决这个问题的。

UpdateData(true);把控件内容装入控件变量
UpdateData(false);用控件变量的值更新控件

如:有编辑控件IDC_EDIT1,对应的变量为字符串m_Edit1,
1、修改变量值并显示在控件中:
m_Edit1 = _T("结果为50");
UpdateData(false);
2、读取控件的值到变量中:
用ClassWizard为IDC_EDIT1添加EN_CHANGE消息处理函数,
void CEditView::OnChangeEdit1()
{
     UpdateData(true);
}

MFC中按钮控件的用法笔记(转)的更多相关文章

  1. VC、MFC中设置控件的背景色、标题、字体颜色、字体要注意的地方[转]

    在MFC中设置控件的背景色.字体.字体颜色.标题等属性主要是利用OnCtlColor函数来实现. 如: HBRUSH CAlarm::OnCtlColor(CDC* pDC, CWnd* pWnd, ...

  2. MFC中Listbox控件的简单使用

    MFC中listbox控件是为了显示一系列的文本,每个文本占一行.   Listbox控件可以设置属性为: LBS_CHILD   :(默认)子窗口 LBS_Visible :(默认)可视 LBS_M ...

  3. MFC中ComboBox控件用法

    MFC ComboBox 一.入门篇 ComboBox (组合框)控件很简单,可以节省空间.从用户角度来看,这个控件是由一个文本输入控件和一个下拉菜单组成的.用户可以从一个预先定义的列表里选择一个选项 ...

  4. MFC中Picture控件显示图像

    图片显示在picture控件中,整个软件最小化后图片消失问题. 解决方案:OpenCV学习笔记(9)利用MFC的Picture控件显示图像+播放视频和捕获摄像头画面 - CSDN博客  http:// ...

  5. 在MFC中改变控件的TAB顺序

    在MFC界面中,控件的TAB顺序如果乱了,不合理,可能会使界面出现意料之外的显示. 例如,在用Spin Control来对Edit Control内的值进行增减时,如果Edit Control.Spi ...

  6. MFC中树控件CTreeCtrl的用法

    树形控件可以用于树形的结构,其中有一个根接点(Root)然后下面有许多子结点,而每个子结点上有允许有一个或多个或没有子结点.MFC中使用CTreeCtrl类来封装树形控件的各种操作.通过调用 BOOL ...

  7. MFC中给控件添加变量,DoDataExchange中

    DoDataExchange函数其实是一项数据动态绑定技术.比如你在写动态按钮过程中须对按钮添加变量时,怎么添加?控件类已经写好了,其变量是已经固定的.你要添加新的变量就要用到DoDataExchan ...

  8. iOS中UIButton控件的用法及部分参数解释

    在UI控件中UIButton是极其常用的一类控件,它的类对象创建与大多数UI控件使用实例方法init创建不同,通常使用类方法创建: + (id)buttonWithType:(UIButtonType ...

  9. MFC中改变控件的大小和位置

    用CWnd类的函数MoveWindow()或SetWindowPos()可以改变控件的大小和位置. void MoveWindow(int x,int y,int nWidth,int nHeight ...

随机推荐

  1. 微信浏览器清缓存、cookie等

    微信浏览器访问:http://debugx5.qq.com

  2. Java EE学习路线

    题记: 不行动,注定是个失败者! 1.coding:servlet->jsp 通过看视频快速上手 2.reading:Thinking in java 英文版 时间协调安排: 1.上课时认真听课 ...

  3. Flask之模板之特殊变量和方法

    3.6 Flask中的特殊变量和方法: 在Flask中,有一些特殊的变量和方法是可以在模板文件中直接访问的. config 对象: config 对象就是Flask的config对象,也就是 app. ...

  4. Proof for Floyd-Warshall's Shortest Path Derivation Algorithm Also Demonstrates the Hierarchical Path Construction Process

    (THIS BLOG WAS ORIGINALLY WRTITTEN IN CHINESE WITH LINK: http://www.cnblogs.com/waytofall/p/3732920. ...

  5. mongodb 的操作

    查找 db.collection的名字.find({"group":"kkkk","key":{$regex:/.*one.*/i}}); ...

  6. 安装mongodb时报错 configure: error: Cannot find OpenSSL's libraries

    请安装这些包以便继续: apt-get install build-essential libexpat1-dev libgeoip-dev libpng-dev libpcre3-dev libss ...

  7. 运动函数封装(js)

    // 运动函数 function starMove(obj,json,fnEnd){ clearInterval(obj.timer); obj.timer  = setInterval(functi ...

  8. Java CST格式字符串转换成Date类型的数据

    Date date = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US).parse("We ...

  9. Excel VBA入门(四)流程控制2-循环控制

    所谓循环控制,即在循环执行一段代码,用于完成一些重复性任务. VBA中的循环控制语句主要有3种:for.while.loop.对于大多数人来说,for的使用频率最高,而我个人也觉得for是最为灵活的, ...

  10. kali linux: 网卡监听及扫描网络

    一.网卡监听: kali不支持内置网卡,仅仅支持usb网卡.我用的虚拟机.首先在虚拟机的可移动设备里打开usb网卡的连接,执行ifconfig命令,如下: eth0接口是本地有线网卡信息,lo接口是本 ...