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

如何把状态栏放大,里边的字也随之放大!

编辑:说三道四文库 发布时间:2018-01-19 01:52
HTML文档下载 WORD文档下载 PDF文档下载
我用的是VC6.0,我在用GetWindowRect()得到了他的高度,但我却无法设置状态栏的高度,我在CStatusBar类里看到了int m_nMinHeight;但他是protected,是我无法访问的,还有OnSetMinHeight()是一个消息映射函数,我不知道在哪里凋用它。里边的字体在哪里设置啊?是否需要自己编程序?那就请帮我编好!!谢谢
upup
too much
自己写一个状态栏的类就可以了。
看来你是很急的!

写了一个测试工程!主要的实现代码如下所示
个人感觉到基本上满足了你的要求!
代码已经发到你的信箱
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);
//false the frame to redraw noclient zone!
pFrame->SendMessage(WM_SIZE,0,0);
}
DELPHI中MEMO组件的光标定位 Delphi中RichEdit的奥妙 Delphi中TApplication类 Delphi中日期时间输入的简洁方法 delphi中怎么调用interbase数据库? 在线等待:哪有语音聊天的原理介绍或者提供语音聊天软件源代码下载的地方? 各位大哥,ADODataSet结合ComboBox.text的SQL语句怎么写? 如何显式调用扩展DLL中的函数? 类、名空间疑问,100分相赠!!!! 继续 关于ShellExecute的使用后的问题 关于drag and drop 文件的问题(先給50分吧!不夠再加) xp奇怪的启动问题 非接触式IC卡的编程问题 xp不能关机 初中生活中最开心的一件事 初中生活终于快要结束了,我特别欢乐.这个寒假结束后 啤酒为何不能冰冻?啤酒瓶上说建议贮存在 5 - 2 昨天晚上,我从冰箱拿出一瓶完全冰冻的玻璃瓶装青岛啤 只有你可以 的英文翻译是什么 夏天喝冰冻啤酒好吗?冰冻啤酒对于身体来说有什么坏处 初中生活因你而精彩要是学校生活的 英语翻译一句话、你是我的左半边翅膀. 作文 美好的初中生活 欧洲多国一致声讨美国监听事件 默克尔希腊疑遭拐卖女童证实身份 其母曾企图国际新闻早报:日本发生7.1级地震马凯会见欧盟委员会主席巴罗佐美媒力赞英国查尔斯王子 称其眼见高过申城夏季出游拉开序幕 “世界杯“成消沪产业调整“负面清单“出炉 针对重点东航在高校启动“先飞后付款“模式 旨申城天气告别连续晴好 本周将有明显降专家:挂中药香囊不仅是习俗 可灭活甲随身带着美女师叔闯异界圣言末日乱世之手南宋风流三生三世三现实金街旅游梁启超故居旅游八仙雕塑旅游太平湾旅游海军营部大楼旧址旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘