如何有效的使用对话框?

    技术2022-05-11  116

    如何有效的使用对话框?译者:徐景周(原作:VGirish)

    Q:如何在对话框中加入工具条      OnInitDialog 中加入下面代码:

        BOOL CYourDlg::OnInitDialog()   {        CDialog::OnInitDialog();              // Create the toolbar. To understand the meaning of the styles used, you        // can take a look at the MSDN for the Create function of the CToolBar class.        ToolBar.Create(this, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_TOOLTIPS |CBRS_FLYBY | CBRS_BORDER_BOTTOM);         // I have assumed that you have named your toolbar's resource as IDR_TOOLBAR1.       // If you have given it a different name, change the line below to accomodate       // that by changing the parameter for the LoadToolBar function.       ToolBar.LoadToolBar(IDR_TOOLBAR1);         CRect rcClientStart;       CRect rcClientNow;       GetClientRect(rcClientStart);         // To reposition and resize the control bar       RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST,0, reposQuery, rcClientNow);      CPoint ptOffset(rcClientNow.left - rcClientStart.left,rcClientNow.top-rcClientStart.top);        CRect rcChild;      CWnd* pwndChild = GetWindow(GW_CHILD);        while (pwndChild)      {        pwndChild->GetWindowRect(rcChild);        ScreenToClient(rcChild);        rcChild.OffsetRect(ptOffset);        pwndChild->MoveWindow(rcChild, FALSE);        pwndChild = pwndChild->GetNextWindow();      }        CRect rcWindow;      GetWindowRect(rcWindow);      rcWindow.right += rcClientStart.Width() - rcClientNow.Width();      rcWindow.bottom += rcClientStart.Height() - rcClientNow.Height();      MoveWindow(rcWindow, FALSE);          // And position the control bars      RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);        return TRUE;  // return TRUE  unless you set the focus to a control   }

        


    Q:如何改变对话框的形状?     可用下面一些涵数:     CreatePolygonRgn     CreateRectRgn     CreateRoundRectRgn .

      CRgn m_rgn;  // Put this in your dialog's header file. i.e. a member variable     // This Gets the size of the Dialog: This piece of code is to be placed in the   // OnInitDialog Function of your dialog.     CRect rcDialog   GetClientRect(rcDialog);     // The following code Creates the area and assigns it to your Dialog   m_rgn.CreateEllipticRgn(0, 0, rcDialog.Width(), rcDialogHeight());   SetWindowRgn(GetSafeHwnd(), (HRGN) m_rgn, TRUE);

    Q:如何实现非客户区移动?    可用下面二种方法:

        // Handler for WM_LBUTTONDOWN message     void CYourDialog::OnLButtonDown(UINT nFlags, CPoint point)   {      CDialog::OnLButtonDown(nFlags, point);      PostMessage( WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM( point.x, point.y));   }     // Handler for WM_NCHITTEST message     LONG CYourDialog::OnNcHitTest( UINT uParam, LONG lParam )   {       int xPos = LOWORD(lParam);      int yPos = HIWORD(lParam);      UINT nHitTest = CDialog::OnNcHitTest(CSize(xPos, yPos));      return (nHitTest == HTCLIENT) ? HTCAPTION : nHitTest;   }

     


    Q:如何使对话框初始为最小化状态?     OnInitDialog 中加入下面代码:

      SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE, NULL);

    Q:如何限定对话框大小范围?     WM_SIZING中加入下面代码:

        void CYourDialog::OnSizing(UINT fwSide, LPRECT pRect)   {      if(pRect->right - pRect->left <=200)          pRect->right = pRect->left + 200;               if(pRect->bottom - pRect->top <=200)          pRect->bottom = pRect->top + 200;        CDialog::OnSizing(fwSide, pRect);   }

     


    Q:如何在对话框中加入状态条?     定义 CStatusBar 变量:

      CStatusBar m_StatusBar;

         定义状态条指定状态:

      static UINT BASED_CODE indicators[] =   {      ID_INDICATOR_CAPS,      ID_INDICATOR_NUM   };

          OnInitDialog 中加入下面代码:

        m_StatusBar.CreateEx(this,SBT_TOOLTIPS,WS_CHILD|WS_VISIBLE|CBRS_BOTTOM,AFX_IDW_STATUS_BAR);   // Set the indicators namely caps and nums lock status   m_StatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT));     CRect rect;   GetClientRect(&rect);                    m_StatusBar.SetPaneInfo(0,ID_INDICATOR_CAPS,SBPS_NORMAL,rect.Width()/2);   m_StatusBar.SetPaneInfo(1,ID_INDICATOR_NUM,SBPS_STRETCH ,rect.Width()/2);     RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,ID_INDICATOR_NUM);     m_StatusBar.GetStatusBarCtrl().SetBkColor(RGB(180,180,180));

    最新回复(0)