如何使VC中的工具栏按钮(最好含文字)的大小可以随窗口大小的改变而改变 各位大侠: 我的问题见标题,最好还随便告诉我窗口(对话框)中组件(比如一个按钮)的大小如何随窗口大小的改变而改变,非常感谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 工具栏你可以建立多个工具栏 不同分辨率加载不同的资源至于控件 帮你写了个类似的东西InitDialog 中://获取未放大前对话框大小 CRect rect; ::GetWindowRect(m_hWnd,rect); ScreenToClient(rect); m_nDlgWidth = rect.right - rect.left; m_nDlgHeight = rect.bottom - rect.top; //窗口最大化,并取得分辨率大小,根据此大小设置控件字体大小 ShowWindow(SW_MAXIMIZE); m_nWidth = GetSystemMetrics(SM_CXSCREEN); m_nHeight = GetSystemMetrics(SM_CYSCREEN); //算出放大倍数,并记录 假设1280*1024 1024*768 800*768 三个分辨率 m_fWidthMul = float(m_nWidth)/float(m_nDlgWidth); m_fHeightMul = float(m_nHeight)/float(m_nDlgHeight); //三种分辨率下设置三种字体,加载不同工具栏 if (m_nWidth >= 1279) { m_newFont.CreateFont(26,0,0,0,FW_NORMAL,0,0,0,1,OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH | FF_SWISS,_T("宋体")); m_nToolBarID = IDR_TOOLBAR1; } else { if (m_nWidth >= 1000) { m_newFont.CreateFont(16,0,0,0,FW_NORMAL,0,0,0,1,OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH | FF_SWISS,_T("宋体")); m_nToolBarID = IDR_TOOLBAR2; } else { m_newFont.CreateFont(12,0,0,0,FW_NORMAL,0,0,0,1,OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH | FF_SWISS,_T("宋体")); m_nToolBarID = IDR_TOOLBAR3; } } ReSize(控件ID)//有多少个控件 调用多少次resize类中添加一个函数 ReSize(int nID)CRect AimRect; GetDlgItem(nAimID)->GetWindowRect(AimRect); ScreenToClient(AimRect); //记录这个区域的左上角点和右下角点 CPoint OldTLPoint,AimTLPoint; OldTLPoint = AimRect.TopLeft(); AimTLPoint.x = long(OldTLPoint.x *m_fWidthMul); AimTLPoint.y = long(OldTLPoint.y *m_fHeightMul); CPoint OldLRPoint,AimLRPoint; OldLRPoint = AimRect.BottomRight(); AimLRPoint.x = long(OldLRPoint.x *m_fWidthMul); AimLRPoint.y = long(OldLRPoint.y *m_fHeightMul); //根据分辨率设置字体,LeftTree的里面的字体大小不变 GetDlgItem(nAimID)->SetFont(&m_newFont); //在放大的窗口里,重绘放大后的窗口 AimRect.SetRect(AimTLPoint,AimLRPoint); GetDlgItem(nAimID)->MoveWindow(AimRect,TRUE); 试试这个:CToolBar::SetSizes(SIZE sizeButton,SIZE sizeImage)我想不用介绍,朋友们也都能猜出这个函数的功能了吧.它用于设置工具按钮的大小以及它上面的位图的大小.这个函数有两个参数,其中,sizeButton用于指定按钮的大小,sizeImage用于指定位图的大小.需注意的是:这两个参数的cx域和cy域都必须大于零,并且,sizeButton的宽度(cx)至少要比sizeImage的宽度大7,高度(cy)至少大6. 首先处理窗口的WM_SIZEX消息,然后:...........OnSize(.....){HWND hWnd = your control; void OnSize() { if (::IsWindow(hWnd)) { // 计算Tree控件的大小 // 调用MoveWindow改变其大小 ::MoveWindow(hWnd,....); } }} 本帖最后由 laiyiling 于 2008-04-22 20:48:13 编辑 我补充个问题,麻烦哪位大侠告诉我下。我向对话框中添加了一个Botton类按钮,并在OnSize里面用MoveWindow函数控制它的位置(因为我要让该按钮随对话框的大小的改变而改变),在OnSize函数里面我又添加了对于按钮标题的控制,因为按钮的大小改变后,我要改变相应的标题字数(我假设的是标题很长,按钮显示不下来,显示不下来的那部分就用“...”代替),这功能虽然实现了,但是在拖拉对话框的时候,按钮一直在闪的,这样让人看着很不爽,我估计是大小改变的,一直在刷新造成的,不知道谁有好的办法可以避免这个问题,本人的QQ 61889058,知道的可以联系我,如果有类似代码的话麻烦发我QQ邮箱,非常感谢 对话框添加控件修改之后编译不能通过 vc生成dll为何不能注册 得到字体的大小 请问怎么让单文档的运行窗口初始化为最大化? 在dll中调用另一dll时为什么即使文件不存在LoadLibrary("MyDll")结果也不为null,并且导致ESP错误 how to attach file to a openned serial port 有办法知道自己的程序是被哪个程序关闭的吗? 求助高手指点,万分感谢 VC如何启动telnet(急!!!) vs2012 C++ 使用dll到处类的问题,可以调用dll中的函数,不能调用dll中的类 如何重绘MFC标题栏 关于VC++6.0文件关联、集成环境
InitDialog 中://获取未放大前对话框大小
CRect rect;
::GetWindowRect(m_hWnd,rect);
ScreenToClient(rect);
m_nDlgWidth = rect.right - rect.left;
m_nDlgHeight = rect.bottom - rect.top;
//窗口最大化,并取得分辨率大小,根据此大小设置控件字体大小
ShowWindow(SW_MAXIMIZE);
m_nWidth = GetSystemMetrics(SM_CXSCREEN);
m_nHeight = GetSystemMetrics(SM_CYSCREEN);
//算出放大倍数,并记录 假设1280*1024 1024*768 800*768 三个分辨率
m_fWidthMul = float(m_nWidth)/float(m_nDlgWidth);
m_fHeightMul = float(m_nHeight)/float(m_nDlgHeight);
//三种分辨率下设置三种字体,加载不同工具栏
if (m_nWidth >= 1279)
{
m_newFont.CreateFont(26,0,0,0,FW_NORMAL,0,0,0,1,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH | FF_SWISS,_T("宋体"));
m_nToolBarID = IDR_TOOLBAR1;
}
else
{
if (m_nWidth >= 1000)
{
m_newFont.CreateFont(16,0,0,0,FW_NORMAL,0,0,0,1,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH | FF_SWISS,_T("宋体"));
m_nToolBarID = IDR_TOOLBAR2;
}
else
{
m_newFont.CreateFont(12,0,0,0,FW_NORMAL,0,0,0,1,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH | FF_SWISS,_T("宋体"));
m_nToolBarID = IDR_TOOLBAR3;
}
} ReSize(控件ID)//有多少个控件 调用多少次resize
类中添加一个函数 ReSize(int nID)
CRect AimRect;
GetDlgItem(nAimID)->GetWindowRect(AimRect);
ScreenToClient(AimRect);
//记录这个区域的左上角点和右下角点
CPoint OldTLPoint,AimTLPoint;
OldTLPoint = AimRect.TopLeft();
AimTLPoint.x = long(OldTLPoint.x *m_fWidthMul);
AimTLPoint.y = long(OldTLPoint.y *m_fHeightMul);
CPoint OldLRPoint,AimLRPoint;
OldLRPoint = AimRect.BottomRight();
AimLRPoint.x = long(OldLRPoint.x *m_fWidthMul);
AimLRPoint.y = long(OldLRPoint.y *m_fHeightMul);
//根据分辨率设置字体,LeftTree的里面的字体大小不变
GetDlgItem(nAimID)->SetFont(&m_newFont);
//在放大的窗口里,重绘放大后的窗口
AimRect.SetRect(AimTLPoint,AimLRPoint);
GetDlgItem(nAimID)->MoveWindow(AimRect,TRUE);
CToolBar::SetSizes(SIZE sizeButton,SIZE sizeImage)
我想不用介绍,朋友们也都能猜出这个函数的功能了吧.它用于设置工具按钮的大小以及它上面的位图的大小.这个函数有两个参数,其中,sizeButton用于指定按钮的大小,sizeImage用于指定位图的大小.需注意的是:这两个参数的cx域和cy域都必须大于零,并且,sizeButton的宽度(cx)至少要比sizeImage的宽度大7,高度(cy)至少大6.
首先处理窗口的WM_SIZEX消息,然后:
...........OnSize(.....)
{HWND hWnd = your control; void OnSize()
{
if (::IsWindow(hWnd))
{
// 计算Tree控件的大小
// 调用MoveWindow改变其大小
::MoveWindow(hWnd,....);
}
}}
我向对话框中添加了一个Botton类按钮,并在OnSize里面用MoveWindow函数控制它的位置(因为我要让该按钮随对话框的大小的改变而改变),在OnSize函数里面我又添加了对于按钮标题的控制,因为按钮的大小改变后,我要改变相应的标题字数(我假设的是标题很长,按钮显示不下来,显示不下来的那部分就用“...”代替),这功能虽然实现了,但是在拖拉对话框的时候,按钮一直在闪的,这样让人看着很不爽,我估计是大小改变的,一直在刷新造成的,不知道谁有好的办法可以避免这个问题,本人的QQ 61889058,知道的可以联系我,如果有类似代码的话麻烦发我QQ邮箱,非常感谢