如何有效的使用对话框?

原创 2002年08月27日 14:28:00
 

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

Q:如何在对话框中加入工具条

     
OnInitDialog 中加入下面代码:

 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

  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));

如何让你的程序避开全局键盘钩子的监视

      一直以来有个疑问,就是如果别人在你的电脑上安装了键盘钩子来监视你的键盘按键动作,我的程序怎么才能避开这些全局键盘钩子(system-wide hook)的监视.正好最近一段时间因为工作关系...
  • iiprogram
  • iiprogram
  • 2006年01月10日 02:25
  • 860

如何有效的使用对话框之二 2010-8-5 19:27

1. 如何有效地使初始窗口不显示 当我们想让窗口初始时不显示时,通常会用ShowWindow(SW_HIDE) ,但实际上还是在启动是可以看到窗口一闪而过的痕迹。所以,可以使用下面的方法来实现它: ...
  • laohu6599
  • laohu6599
  • 2013年01月09日 13:36
  • 196

Java中关于弹出对话框的问题

  对于C/S模式下的对话框弹出问题就不说了,这里只讨论B/S模式下的实现.  开发环境是:struts+hiberinate+spring  遇到的问题是在JSP页面新增成功后弹出新增成功的提示对话...
  • ynxiaofan
  • ynxiaofan
  • 2008年01月25日 10:10
  • 8273

unity之简单的对话框

今天我们主要学习了svn的用法,并且写了项目的需求分析。        在今天的空余时间,我还抽空看了一下对话框的制作,在一个游戏中,NPC是不可缺少的,在接任务,买装备的时候和NPC对话就必不可少...
  • ti1an123
  • ti1an123
  • 2015年01月09日 22:15
  • 466

如何有效使用B2B

互联网 电信 b2b网站 ip 英国 it 分类:外贸技巧 来源:FOB论坛 时间:2008-10-18 电子商务,电子是手段,商务是根本。对我来说最大的风险是客户产品在网络上还没形成市场。所以我要告...
  • abcyangtao88
  • abcyangtao88
  • 2009年02月23日 12:39
  • 507

如何有效使用bitmap

使用bitmap容易遭遇out of memory exception,主要由以下三个原因: 每个android app分配的内存有限; bitmap比较耗费内存,例如1300w像素图片,每个像素可能...
  • studyboyjlu4
  • studyboyjlu4
  • 2013年11月24日 22:02
  • 445

对话框自带滚动条的使用

.h: CButton* m_pBtns; afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar); afx_...
  • dingxz105090
  • dingxz105090
  • 2016年09月30日 09:52
  • 788

如何有效使用linkedin

I. Intro 首先这篇不讲任何跟写简历有关的东西,因为简历的问题千差万别,除非你是公司的HR,或者你知道公司的Applicant Tracking System到底是根据什么算法筛选简历的,...
  • u012204343
  • u012204343
  • 2014年01月28日 08:15
  • 1300

MFC对话框程序中使用OpenGL

在MFC的对话框程序中需要使用OpenGL在某个对话框中作图,综合和网上的两篇文章的内容(文章一,文章二),也有自己的心得体会。         首先需要配置好opengl的环境,程序中会使用到gla...
  • u012501459
  • u012501459
  • 2013年12月02日 13:50
  • 2256

获取对话框句柄

简介: 获取主对话框和子对话框的句柄,子对话框通过FindWindow。 1.主对话框 CTcpAsynSDlg *pMainDlg = (CTcpAsynSDlg*)AfxGetApp()->G...
  • C_gyl
  • C_gyl
  • 2017年03月26日 15:23
  • 907
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何有效的使用对话框?
举报原因:
原因补充:

(最多只允许输入30个字)