WEB开发网
开发学院软件开发VC 如何有效地使用对话框 阅读

如何有效地使用对话框

 2010-07-01 20:43:00 来源:WEB开发网   
核心提示:Q:如何实现非客户区移动?可用下面二种方法// Handler for WM_LBUTTONDOWN messagevoid CYourDialog::OnLButtonDown(UINT nFlags, CPoint point){ CDialog::OnLButtonDown(nFlags, point); Pos

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

1. 如何有效地使初始窗口不显示
当我们想让窗口初始时不显示时,通常会用ShowWindow(SW_HIDE) ,但实际上还是在启动是可以看到窗口一闪而过的痕迹。所以,可以使用下面的方法来实现它:
(1.1)先在构造函数中设置布乐变量 visible值为false.
visible = false;

(1.2)重载 WM_WINDOWPOSCHANGING,并添加下面代码:

void CTest_deleteDlg::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos)
{
  if(!visible)
    lpwndpos->flags &= ~SWP_SHOWWINDOW;
  CDialog::OnWindowPosChanging(lpwndpos);
}

(1.3)然后设布尔visible变量值为true,并在要显示窗口时,再用ShowWindow(SW_SHOW)既可。

visible = true;
ShowWindow(SW_SHOW);

上一页  1 2 3 4 5 6  下一页

Tags:如何 有效 使用

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接