Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2095824
  • 博文数量: 909
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 12260
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-06 20:50
文章分类

全部博文(909)

文章存档

2008年(909)

我的朋友

分类:

2008-05-06 21:27:35

一起学习
如何有效地使用对话框
译者:徐景周(原作: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));


下载本文示例代码


如何有效地使用对话框如何有效地使用对话框如何有效地使用对话框如何有效地使用对话框如何有效地使用对话框如何有效地使用对话框如何有效地使用对话框如何有效地使用对话框如何有效地使用对话框如何有效地使用对话框如何有效地使用对话框如何有效地使用对话框
阅读(300) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~