您的位置:首页 > 其它

如何在对话框中加入状态条?

2009-08-01 15:52 309 查看


WM工具栏的使用

/////////////////////////////////////////////////////////////////////////////

CFileAssociationDlg.h

////////////////////////////////////////////////////////////////////////////

//申明状态栏变量

CStatusBar m_status;

/////////////////////////////////////////////////////////////////////////////

CFileAssociationDlg.cpp

////////////////////////////////////////////////////////////////////////////

// 创建状态栏中要显示的内容, 通过创建String资源实现, 这里使用数组indicators存储资源的ID

static UINT BASED_CODE indicators[] =

{

ID_INDICATOR_NISH,

ID_INDICATOR_TIME

};

/*

virtual BOOL Create(

CWnd* pParentWnd,

DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_TOP,

UINT nID = AFX_IDW_STATUS_BAR

);

创建状态栏, 并把创建的状态栏与m_status绑定

*/

m_status.Create(this);

// 通过数组指针指定状态栏要显示内容, indicators表示数组指针, 2 表示indicators指向的数组的元素个数

m_status.SetIndicators(indicators, 2);

// 获取客户区大小

CRect rect;

GetClientRect(&rect);

// 由于状态栏由多个方块组成, SetPaneInfo用来设置每个方块的属性

// SBPS_NORMAL正常type, SBPS_STRETCH两边伸展, 填充未使用的区域

m_status.SetPaneInfo(0, ID_INDICATOR_NISH, SBPS_NORMAL, rect.Width() - 100);

m_status.SetPaneInfo(1,ID_INDICATOR_TIME,SBPS_STRETCH ,0);

// 设置状态栏属性

m_status.SetBarStyle(CBRS_ALIGN_TOP| CBRS_FLYBY | CBRS_SIZE_DYNAMIC);

//::SetBkColor((m_status.GetStatusBarCtrl().GetDC()),RGB(180,180,180));

// 画状态栏在屏幕上

RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST, ID_INDICATOR_TIME);

以下内容为[转]




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));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: