说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

!!!急急!现在想把状态栏放大,里边的字也随之放大

编辑:说三道四文库 发布时间:2018-06-23 02:24
HTML文档下载 WORD文档下载 PDF文档下载
现在想把状态栏放大,里边的字也随之放大!
我用的是VC6.0,我在用GetWindowRect()得到了他的高度,但我却无法设置状态栏的高度,我在CStatusBar类里看到了int m_nMinHeight;但他是protected,是我无法访问的,还有OnSetMinHeight()是一个消息映射函数,我不知道在哪里凋用它。里边的字体在哪里设置啊?自己编程序?那就请帮我编好!!我的信箱crazyeagle@sina.com  明天急用  谢谢
我知道有一个方法可以:
    你在编辑状态栏资源的时候,把资源的图标拖大。显示出来的状态栏就是多大。
字体可以用SetFont()设置
try?
看来你是很急的!

写了一个测试工程!主要的实现代码如下所示
个人感觉到基本上满足了你的要求!
代码已经发到你的信箱
itanynj@msn.com
南京
宋业文
----------------------------------------

//custom the personal statusbar in child frame
static UINT indicators[]=
{
ID_SEPARATOR,
ID_INDICATOR_X,//"x=0000"
ID_INDICATOR_Y//"y=0000"
};

/////////////////////////////////////////////////////////////////////////////
// CChildFrame message handlers

int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1)
return -1;

// TODO: Add your specialized creation code here

//create the child frame status bar with default font size :6
if(!this->m_wndStatusBar.Create(this,WS_CHILD|WS_VISIBLE|CBRS_BOTTOM,IDW_CHILD_STATUSBAR)
||!this->SetStatusBarFont(&this->m_wndStatusBar)||!this->m_wndStatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create the status bar!\n");
return -1;
}

//initialize the pane to show nothing at the beginning
int iCount=this->m_wndStatusBar.GetCount();
for(int i=0;i<iCount;i++)
this->m_wndStatusBar.SetPaneText(i,NULL);

//no need to call the SetMinHeight() function to set the height of statusbar
//because of status bar will adjust the height to fit the height of its font!
//this->m_wndStatusBar.GetStatusBarCtrl().SetMinHeight(20);   
return 0;
}

CStatusBar* CChildFrame::GetChildStatusBar()
{
ASSERT(::IsWindow(this->m_wndStatusBar.m_hWnd));
return &this->m_wndStatusBar;
}

BOOL CChildFrame::SetStatusBarFont(CStatusBar *pStatusBar,int nFontSizes)
{
ASSERT_VALID( pStatusBar );
//1-prepare to clear the prev font
if(this->m_StatusBarFont.GetSafeHandle()!=NULL)
{
this->m_StatusBarFont.DeleteObject();
}
// 2 - Create font
// Initializes a CFont object with the specified characteristics. 

VERIFY(m_StatusBarFont.CreateFont(
 nFontSizes*5,                        // nHeight
 0,                         // nWidth
 0,                         // nEscapement
0,                         // nOrientation
 FW_NORMAL,                 // nWeight
FALSE,                     // bItalic
FALSE,                     // bUnderline
0,                         // cStrikeOut
ANSI_CHARSET,              // nCharSet
   OUT_DEFAULT_PRECIS,        // nOutPrecision
   CLIP_DEFAULT_PRECIS,       // nClipPrecision
   DEFAULT_QUALITY,           // nQuality
   DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily
   "Arial"));                 // lpszFacename

// 3 - Set status bar font
pStatusBar->SetFont( &m_StatusBarFont );
return TRUE;
}

CFont& CChildFrame::GetFontSize()
{
return this->m_StatusBarFont;
}
-----------------------------------
void CMdiStatusBarView::OnMouseMove(UINT nFlags, CPoint point) 
{
// TODO: Add your message handler code here and/or call default
CChildFrame *pFrame=(CChildFrame*)(this->GetParentFrame());
CStatusBar *pStatusBar=pFrame->GetChildStatusBar();
int index_x=pStatusBar->CommandToIndex(ID_INDICATOR_X);
int index_y=pStatusBar->CommandToIndex(ID_INDICATOR_Y);

CString str;
str.Format("x=%4d",point.x);
pStatusBar->SetPaneText(index_x,str);

str.Format("y=%4d",point.y);
pStatusBar->SetPaneText(index_y,str);

CView::OnMouseMove(nFlags, point);
}

void CMdiStatusBarView::OnSizeSmall() 
{
// TODO: Add your command handler code here
CChildFrame *pFrame=(CChildFrame*)(this->GetParentFrame());
CStatusBar *pStatusBar=pFrame->GetChildStatusBar();
pFrame->SetStatusBarFont(pStatusBar,8);

CClientDC dc(pStatusBar);
CFont *pOldFont=dc.SelectObject(&pFrame->GetFontSize());
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
//update the width of status bar
int iCount=pStatusBar->GetCount();
for(int i=0;i<iCount;i++)
{
CString str;
str=pStatusBar->GetPaneText(i);
pStatusBar->SetPaneText(i,str);
int nID=pStatusBar->GetItemID(i);
UINT nStyle=pStatusBar->GetPaneStyle(i);
str.Format("x=0000");//max size
CSize size=dc.GetTextExtent(str);
pStatusBar->SetPaneInfo(i,nID,nStyle,size.cx);
}
dc.SelectObject(pOldFont);
//force the frame to redraw noclient zone!
pFrame->SendMessage(WM_SIZE,0,0);
}
谢谢
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘