0
顶一下

如何有效地使用对话框

2007-03-27 10:18:31  作者:   来源:   浏览次数:92   评论

如何有效地使用对话框
译者:徐景周(原作: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->lef



〖责任编辑:发表评论 告诉好友     
与 相关的教程