VC常用小技巧

VC常用小技巧--让窗口一启动就最大化

转载 2009-07-05 17:23:28 阅读452 评论1 字号:

窗口

让窗口一启动就最大化
把应用程序类(CxxxApp)的 InitInstance() 函数中的
m_pMainWnd->ShowWindow(SW_SHOW);
改为
m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);
则窗口一启动就最大化显示。

如何设置窗口的初始尺寸
在将应用程序类(CxxAPP)的 InitInstance() 函数中加入:
m_pMainWnd->SetWindowPos(NULL,x,y,Width,Height,SWP_NOMOVE);
Width
为窗口宽度,Height为窗口高度
SWP_NOMOVE
表示忽略位置(x,y)
如:

让窗口居中显示
以下两种方法可任选其一:
①在应用程序类(CxxxApp)的 InitInstance() 函数中加入:
②在主框架类(MainFrm.cpp)OnCreate()函数中加入:
CenterWindow( GetDesktopWindow() );
如:如何修改窗口标题
窗口标题一般形式为:文档标题 - 程序标题
1、设置文档标题:
在文档类(CxxxDoc)OnNewDocument()函数中加入语句:SetTitle("文档名");
如:TextEditorDoc.cpp:①可删除Debug文件夹和Release文件夹;
②原则上还可删除主文件夹中所有图标为 的文件,包括.aps.ncb.opt.plg等文件,它们都能在编译时重建。但一般.clw不要删除,它可能导致ClassWizard不好用。



控件
如何隐藏和显示控件
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 ); //
显示控件

按钮的使能与禁止
ClassWizardMember Variables为按钮定义变量,如:m_Button1

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

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

单选按钮控件(Radio Button)的使用
一、对单选按钮进行分组:
每组的第一个单选按钮设置属性:GroupTabstopAuto;其余按钮设置属性TabstopAuto
如:
Radio1
Radio2Radio3为一组,Radio4Radio5为一组
设定Radio1属性:GroupTabstopAuto
设定Radio2属性:TabstopAuto
设定Radio3属性:TabstopAuto
设定Radio4属性:GroupTabstopAuto
设定Radio5属性:TabstopAuto
二、用ClassWizard为单选控件定义变量,每组只能定义一个。如:m_Radio1m_Radio4
三、用ClassWizard生成各单选按钮的单击消息函数,并加入内容:
void CWEditView::OnRadio1()
{
m_Radio1 = 0; //
第一个单选按钮被选中
}
void CWEditView::OnRadio2()
{
m_Radio1 = 1; //
第二个单选按钮被选中
}
void CWEditView::OnRadio3()
{
m_Radio1 = 2; //
第三个单选按钮被选中
}
void CWEditView::OnRadio4()
{
m_Radio4 = 0; //
第四个单选按钮被选中
}
void CWEditView::OnRadio5()
{
m_Radio4 = 1; //
第五个单选按钮被选中
}
当控件变量值为0时,它对应组的第一个单选按钮处于选中状态。

 

 

VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客 BOOL CDzyApp::InitInstance()
VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客
...
{
VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客AfxEnableControlContainer();
VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客……
VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客
VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客
// The one and only window has been initialized, so show and update it.

VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客
m_pMainWnd->SetWindowPos(NULL,0,0,750,555,SWP_NOMOVE);//设置窗口的初始大小为750*555
VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客
m_pMainWnd->ShowWindow(SW_SHOW);
VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客m_pMainWnd
->
UpdateWindow();
VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客
VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客
return
TRUE;
VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客}

VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客

 

VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客m_pMainWnd->CenterWindow( GetDesktopWindow() );VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客

 

VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) {
VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客
if (CFrameWnd::OnCreate(lpCreateStruct) == -1
)
VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客
return -1
;
VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客……
VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客
VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客
//
TODO: Delete these three lines if you don't want the toolbar to
VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客
// be dockable

VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客EnableDocking(CBRS_ALIGN_ANY);
VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客DockControlBar(
&
m_wndToolBar);
VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客
VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客CenterWindow( GetDesktopWindow() );
//使窗口打开时处于屏幕正中

VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客

VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客
return 0;
VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客}

VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客

 

VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客BOOL CTextEditorDoc::OnNewDocument() {
VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客
if (!
CDocument::OnNewDocument())
VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客
return
FALSE;
VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客
//
TODO: add reinitialization code here
VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客
// (SDI documents will reuse this document)

VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客
SetTitle("未命名.txt"); //设置文档标题
VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客
return TRUE;
VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客}

VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客

2、设置程序标题:
在框架类(CMainFrame)的PreCreateWindow()函数中加入语句:m_strTitle = _T("程序标题");
如:MainFrm.cpp:

VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) {
VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客
if( !
CFrameWnd::PreCreateWindow(cs) )
VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客
return
FALSE;
VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客
//
TODO: Modify the Window class or styles here by modifying
VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客
// the CREATESTRUCT cs

VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客
cs.style&=~FWS_ADDTOTITLE;//去除标题栏文字前面的"无标题"
VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客
m_strTitle = _T("文本整理器"); //设置程序标题
VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客
return TRUE;
VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客}

VC常用小技巧--让窗口一启动就最大化 - 云思 - 凝物の技术博客

以上两点比较适用于视图-文档结构的程序,在新建文档时,系统会自动运行OnNewDocument()函数,在其中可以设置合适的标题。对于未采用文档的程序可以用下面的方法修改标题:
3、修改窗口标题:
修改窗口标题一般在打开文件函数OnFileOpen()和另存为函数OnFileSaveAs()中进行,可以使用下面的函数:其中文档标题和程序标题可使用定义过的串变量。



项目
如何干净的删除一个类?
1、先删除项目中对应的.h和.cpp文件,(选中后用Delete键删除)

2、保存后退出项目,到文件夹中删除实际的.h和.cpp文件;
3、删除.clw文件;
4、重新进入项目,进行全部重建(rebuild all)。

如何建立一个新类?
   
从“插入”(Insert)菜单中选择“新建类”(New Class),在弹出的对话框中选择基类(Base class),在Name中输入新类的名字(一般都以C开头)即可。
如果想要建立一个没有基类的自定义类,则在New Class对话框中把Class type设置为generic,再输入类名即可。


如何把外来文件添加到项目中?
   
先把外来文件复制到当前项目的目录下,从“项目”(Project)菜单下选择“添加项目”(Add to Project)下的“Files”菜单项,从弹出的打开文件对话框中把外来文件打开即可。


如何在一个工作区中打开多个项目?
   
一般编程者都有这样的经历:做了一个项目,由于不满意,想从头重做,但又想把旧项目的一些可用内容拷到新项目中来,以免做重复工作,这时就需要在新项目中打开旧项目。
    先打开新项目,从“项目”(Project)菜单下选择“插入项目到工作区”(Insert Project into Workspace),从弹出的打开文件对话框中打开旧项目的.asp文件即可。

    之后,可以利用“项目”(Project)菜单下的“设置活动项目”(Select Active Project)的选项中切换各打开的项目。
注意:在一个工作区中打开的各项目不能同名。

如何把项目中的文件分类存放?
当我们往项目中添加新类时,它会把源文件放在Source Files下,头文件放在Header Files下。当项目中文件很多时,管理不便,最好添加新节点,把文件分类放置。
右击项目节点树的根节点,选择“New Folder...”,在弹出的对话框中填入新节点名,则新节点就建立了,用鼠标节点树中的文件拖入新节点,就可以把文件分类了。
以上分类只是在项目的节点树中分类,它不影响文件在磁盘上的位置,所有.cpp文件和.h文件仍在项目的根目录下,最好文件本身也能分类存放在不同文件夹中。
在Windows下,用“新建文件夹”在项目的根目录下建立子文件夹,如DialogClass,把所有对话框类的.cpp文件和.h文件拖入其中。
回到VC下,右键单击项目树中更改了路径的节点,选择“Properties”,在弹出的对话框中修改文件路径,如:把原路径“./Dialog1.cpp”改为“./DialogClass/Dialog1.cpp”。
打开Dialog1.cpp文件,修改它包含的文件路径。如:
#include "stdafx.h"
#include "PluckBox.h"
#include "Dialog1.h"
改为:
#include "stdafx.h"
#include "..//PluckBox.h"
#include "Dialog1.h"
打开ClassWizard,它会提示你文件不存在,单击“确定”后,从对话框中用“Browse...”选择文件所在路径,则ClassWizard也可正常使用了。



编辑
编辑代码时,跟随提示消失了怎么办?
单 击“工具”(Tools)菜单中的“设置”(Options)菜单项,在弹出的Options对话框中选择Editor制表页,把它最下方的四个复选框都 选中(Auto list member、Auto type info、Code comments、Auto parameter info),这样,当用户输入“->”或“.”时,会自动显示跟随提示,减少了输入负担。



对话框
如何修改对话框的背景色
在对话框的OnPaint()函数中加入下面语句:
CRect rect;
GetClientRect(&rect); //
计算对话框的尺寸
dc.FillSolidRect(&rect,RGB(192,248,202)); //绘制对话框背景色

如何让弹出式对话框具有统一的背景色
在应用程序类CxxxApp的InitInstance()函数中加入下面的语句:
SetDialogBkColor( RGB(192,248,202) );
则所有用户定义的弹出式对话框都以RGB(192,248,202)为背景色,就不需要逐个进行设置了。


如何让打开文件对话框能进行多项选择
在定制打开文件对话框时,增加OFN_ALLOWMULTISELECT属性,就可以使打开文件对话框进行多选了。
如:
CFileDialog m_Dlg( TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT
| OFN_ALLOWMULTISELECT, NULL, NULL );
之后,用GetStartPosition()函数获取选择的起始文件位置,用GetNextPathName()函数获取各位置上的文件名。
如:
if( m_Dlg.DoModal() == IDOK )
{
POSITION pos;
pos = m_Dlg.GetStartPosition();
while( pos )
{
m_Path = m_Dlg.GetNextPathName(pos);
…………
}
}

为什么用打开文件对话框选择多个文件到一定数目时,文件没有打开?
CFileDialog为文件列表设置有缓冲区,当选择文件过多时,会造成缓冲区溢出,造成一些文件没有被打开。可以采用自定义大缓冲区代替系统缓冲区的方法解决。

如:
CFileDialog m_Dlg( TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT
| OFN_ALLOWMULTISELECT, NULL, NULL );//
定制打开文件对话框
char* pBuf = new char[20480]; //申请缓冲区
m_Dlg.m_ofn.nMaxFile = 20480; //让pBuf代替CFileDialog缓冲区
m_Dlg.m_ofn.lpstrFile = pBuf;
m_Dlg.m_ofn.lpstrFile[0] = NULL;
…………
delete []pBuf; //
回收缓冲区

 

转载:http://hi.baidu.com/jjzhang166/blog/item/a346ed1f3eae6c66f624e4c9.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值