zoukankan      html  css  js  c++  java
  • VC++ 定制应用程序的外观

    一.在窗口创建之前改变窗口的大小和标题

     要改变应用程序窗口的大小可以通过在PreCreatWindowl函数中修改CREATSTRUCT结构体变量成员的值

      BOOL CMainFrame::PreCreatWindow(CREATSTRUCT cs)

      {

         if(!CFrameWnd::PreCreatWindow(cs))

          return FALSE;

        (在这个函数的地方改变CREATSTRUCT结构体变量的值)

          cs.cx=300;//把cx的值改为300

          cs.cy=200;//把cy的值改为200

          return TRUE;

       }

     2.改变应用程序窗口的标题

       要改变应用窗口的标题可以通过改变CREATSTRUCT结构体成员变量的 lpszName参数的值来实现。

       BOOL CMainFrame::PreCreatWindow(CREATSTRUCT cs)

      {

         if(!CFrameWnd::PreCreatWindow(cs))

          return FALSE;

        (在这个函数的地方改变CREATSTRUCT结构体变量的值)

          cs.cx=300;//把cx的值改为300

          cs.cy=200;//把cy的值改为200

          cs.style&=~FWS_ADDTOTITLE;//其中FWS_ADDTOTITLE是指示将文档的标题加到窗口上,这是MFC默认的                               //式,所以需要将这个默认的方式去掉以后才可以加自己的标题。

          cs.lpszName="李现会";

          return TRUE;

       }

    二 在窗口创建之后改变窗口的大小和标题

        1.首先介绍一下 SetWindowLong();函数;

        SetWindowLong(HWND hWnd,int index, LONG dwNewLong );SetWindowLong()实现了改变窗口的属性的功能。

       第一个参数是指向了 需要改变的窗口的句柄。

       第二个参数是要改变窗口的具体的方面。

       第三个参数是要把该窗口改变成什么样子;

       通常SetWindowLong();函数可以在窗口创建之后改变窗口的外观。

       在单文档文件中,通常是在PreCreatWindow函数中实现“预创建”窗口。而在OnCreat()函数中,当执行到return 0;语句的时候已经创建完成了窗口。所以在OnCreat()函数中调用SetWindowLong();函数来实现窗口创建完成之后的改变窗口的外观。

      所以在OnCreat()函数中调用SetWindowLong()函数具体用法如下:

       int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
     if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
      return -1;
     
     if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
      | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
      !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
     {
      TRACE0("Failed to create toolbar ");
      return -1;      // fail to create
     }

     if (!m_wndStatusBar.Create(this) ||
      !m_wndStatusBar.SetIndicators(indicators,
        sizeof(indicators)/sizeof(UINT)))
     {
      TRACE0("Failed to create status bar ");
      return -1;      // fail to create
     }

     // 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);
     SetWindowLong(m_hWnd,GWL_STYLE,WS_OVERLAPPEDWINDOW);//在MFC中如果想在窗口创建之后改变窗口的外观,可以通过调用SetWindowLong();函数
     return 0;
    }

    其中 WS_OVERLAPPEDWINDOW定义如下:

      #define WS_OVERLAPPEDWINDOW(WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX | WS_MAXIMIZE | WS_THICKFRAME);

      其中 WS_SYSMENU是系统菜单,不包括按钮。

      使得窗口可以最大化和最小化。

      2.用SetWindowLong()和GetWindowLong()两个函数结合来改变窗口的某些属性;

       如法如下:

      
    int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
     if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
      return -1;
     
     if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
      | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
      !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
     {
      TRACE0("Failed to create toolbar ");
      return -1;      // fail to create
     }

     if (!m_wndStatusBar.Create(this) ||
      !m_wndStatusBar.SetIndicators(indicators,
        sizeof(indicators)/sizeof(UINT)))
     {
      TRACE0("Failed to create status bar ");
      return -1;      // fail to create
     }

     // 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);
     SetWindowLong(m_hWnd,GWL_STYLE,GetWindowLong(m_hWnd,GWL_STYLE)&~WS_MAXIMIZEBOX);// 在MFC中如果想在窗口创建之后改变窗口的外观,可以通过调用SetWindowLong();函数
     return 0;
    }可以看到在SetWindowLong();函数的第三个参数处实用了GetWindowLong();函数,该函数返回的是函数的类型,该类型和 WS_MAXIMIZEBOX的去反相与,成为SetWindowLong()函数的第三个参数,所以新设置的窗口不再有最大化这个选项了。

  • 相关阅读:
    ES6 变量的解构赋值
    【js重学系列】new
    【js面试系列】手写常见js方法
    【js重学系列】this
    js-继承
    【js重学系列】数组高阶函数
    【js面试系列】数组去重
    云服务器部署项目-基本使用流程
    mongodb-基本使用
    移动端适配
  • 原文地址:https://www.cnblogs.com/zhaoxinshanwei/p/3843422.html
Copyright © 2011-2022 走看看