zoukankan      html  css  js  c++  java
  • MFC关于窗口的有关操作 .

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

    窗口

    让窗口一启动就最大化
    把应用程序类(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 ); //显示控件

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

    单选按钮控件(Radio Button)的使用
    一、对单选按钮进行分组:
    每组的第一个单选按钮设置属性:Group,Tabstop,Auto;其余按钮设置属性Tabstop,Auto。
    如:
    Radio1、Radio2、Radio3为一组,Radio4、Radio5为一组
    设定Radio1属性:Group,Tabstop,Auto
    设定Radio2属性:Tabstop,Auto
    设定Radio3属性:Tabstop,Auto
    设定Radio4属性:Group,Tabstop,Auto
    设定Radio5属性:Tabstop,Auto
    二、用ClassWizard为单选控件定义变量,每组只能定义一个。如:m_Radio1、m_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时,它对应组的第一个单选按钮处于选中状态。

    BOOL CDzyApp::InitInstance()
    ...{
    AfxEnableControlContainer();
    ……

    // The one and only window has been initialized, so show and update it.
    m_pMainWnd->SetWindowPos(NULL,0,0,750,555,SWP_NOMOVE);//设置窗口的初始大小为750*555
    m_pMainWnd->ShowWindow(SW_SHOW);
    m_pMainWnd->UpdateWindow();

    return TRUE;
    }

    m_pMainWnd->CenterWindow( GetDesktopWindow() );

    int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) {
    if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
    return -1;
    ……

    // TODO: Delete these three lines if you don't want the toolbar to
    // be dockable
    m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
    EnableDocking(CBRS_ALIGN_ANY);
    DockControlBar(&m_wndToolBar);

    CenterWindow( GetDesktopWindow() ); //使窗口打开时处于屏幕正中

    return 0;
    }

    BOOL CTextEditorDoc::OnNewDocument() {
    if (!CDocument::OnNewDocument())
    return FALSE;
    // TODO: add reinitialization code here
    // (SDI documents will reuse this document)
    SetTitle("未命名.txt"); //设置文档标题
    return TRUE;
    }

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

    BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) {
    if( !CFrameWnd::PreCreateWindow(cs) )
    return FALSE;
    // TODO: Modify the Window class or styles here by modifying
    // the CREATESTRUCT cs
    cs.style&=~FWS_ADDTOTITLE;//去除标题栏文字前面的"无标题"
    m_strTitle = _T("文本整理器"); //设置程序标题
    return TRUE;
    }

    以上两点比较适用于视图-文档结构的程序,在新建文档时,系统会自动运行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

  • 相关阅读:
    无线传感网3-1.目标物的覆盖技术
    无线传感网2-传感器布局方法
    JAVA 第二周课程总结
    2019春总结作业
    第十二周作业
    第十一周作业
    第十周
    第九周作业
    第八周作业
    第七周作业
  • 原文地址:https://www.cnblogs.com/yangxx-1990/p/4878097.html
Copyright © 2011-2022 走看看