窗口设置的一般操作方法
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);
}
窗口设置的一般操作方法相关推荐
- 戴尔便携式计算机右键,戴尔最新笔记本如何在右键菜单添加“在此处打开命令窗口”设置项?...
最近有位戴尔最新笔记本用户,在升级Win10系统后,发现原本的命令提示符已被Powershell取代,因此操作上感觉有点不太习惯,需要一点时间适应,想知道如何在桌面右键菜单中添加"在此处打开 ...
- win7计算机文件夹折叠,win7系统折叠组窗口设置不折叠的操作方法
很多小伙伴都遇到过对win7系统折叠组窗口设置不折叠进行设置的困惑吧,一些朋友看过网上对win7系统折叠组窗口设置不折叠设置的零散处理方法,并没有完完全全明白win7系统折叠组窗口设置不折叠是如何设置 ...
- cmd窗口设置charset
查看cmd窗口charset:方法1 在命令行标题栏上点击右键,选择"属性"->"选项",查看当前的charset. 查看cmd窗口charset:方法2 ...
- vector 设置大小_BetterSnapTool for Mac(窗口设置工具) v1.9.3
BetterSnapTool for mac版是一款在国内非常受欢迎的窗口管理软件,这款软件可以让你轻松调整桌面上窗口的大小和位置,你可以将其拖动到屏幕上的任何一个位置,这样可以让你像是用window ...
- centos安装mysql怎么远程访问_centos上安装mysql并设置远程访问的操作方法
1.下载mysql的repo源 2.安装mysql-community-release-el7-5.noarch.rpm包 $ sudo rpm -ivh mysql-community-releas ...
- WPF如何给窗口设置透明png的图片背景
在 WPF 中,如果想做一个背景透明的异形窗口,基本上都要设置 WindowStyle="None".AllowsTransparency="True" 这两个 ...
- python窗口设置背景图片_PyQt5 实现给窗口设置背景图片的方法
PyQt5 实现给窗口设置背景图片的方法 QPalette类可以十分简单的达到设置窗口背景图片的目的 def use_palette(self): self.setWindowTitle(" ...
- java图形界面编程如何给窗口设置背景图片
文章目录 前言 一.知识点介绍 二.代码实现 总结 前言 相信大家在GUI编程过程中,也就是开发窗口程序过程中,比如游戏界面等,难免会需要给窗口添加背景图片,接下来我将给大家详细讲解如何给窗口设置背景 ...
- 基于python实现的聊天室(客户端:一)窗口设置
前言 就是自己想用python做一个聊天室,然后看看socket库,websocket库,有点底层,然后也会用到协程的东西,不是很明白,一时间也不知道怎么写,因为前面使用过了flask-socketi ...
- 上海买房税费要上调? 税务:仅是窗口设置调整
上海买房税费要上调? 税务:仅是窗口设置调整 近来,一则有关"买房抓紧入市,国家只给你2个月喘气机会,否则要多交费,税费即将上调"的帖子在网上流传.上海侃家网介绍,该帖子写道,徐汇 ...
最新文章
- 2022-2028年中国基因工程药物产业市场研究及前瞻分析报告
- numpy resize
- hexo github pages 搭建博客
- ipad UISplitViewController 导航视图控制器标题设置
- 在C#中使用代理的方式触发事件 的简单习作
- 大厂首发:338页网易Java面试真题解析火爆全网
- 阿里云交通数据中台解决方案打造“数字化生产力”
- 如此沙雕的代码注释,还是程序员会玩!
- Python matplotlib生成图片背景透明
- 教你如何解决Excel工具箱控件无效
- HiC-Pro | HiC数据处理工具
- 【免费or付费】外卖优惠券公众号的申请以及做法有什么不同?
- poj 1013 模拟 天平问题
- PPT忘记加密密码的处理方式
- 【Opencv】【C++】 Opencv之calcHist() 计算直方图
- Lenovo y40-70安装Ubuntu 16.04*后出现的[Firmware Bug]
- html中字的属性设置,html怎么设置字体属性
- 制造商将注意力转向轻质量以进一步提高LED市场份额
- fedora23 安装tftpd
- 【大街推荐】给明年依然年轻的我们:欲望、外界、标签、时间、人生目标、现实、后悔、和经历