怎样让我的程序适应不同的分辨率呢? 比如我在1024*768下编的单文档界面的程序(此时界面上没有滚动条的),在800*600分辨率下就会出现滚动条了,有什么办法让程序自动调整来适应不同的分辨率,让他在不同的分辨率下看起来都是一模一样的界面呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 动态调整屏幕分辨率VC中提供了修改显示设备属性的函数:ChangeDisplaySettings,该函数能够按照你的需要对显示设备作相应的修改。函数声明如下:LONG ChangeDisplaySettings( LPDEVMODE lpDevMode, DWORD dwflags);参数含义lpDevMode:一个指向DEVMODE数据结构的指针,描述了欲设定显示器的各类属性。Dwflags:表明对显示设备的修改方式。void CChngDsplyMdDlg::OnChagne() { UpdateData(TRUE); DEVMODE lpDevMode; lpDevMode.dmBitsPerPel = m_nBitsPerPixel; lpDevMode.dmPelsWidth = m_nWidthPixels; lpDevMode.dmPelsHeight = m_nHeightPixels; lpDevMode.dmSize = sizeof(lpDevMode); lpDevMode.dmFields = DM_PELSWIDTH|DM_PELSHEIGHT|DM_BITSPERPEL; LONG result = ChangeDisplaySettings(&lpDevMode,0); if(result == DISP_CHANGE_SUCCESSFUL) { AfxMessageBox("修改成功"); ChangeDisplaySettings(&lpDevMode,CDS_UPDATEREGISTRY); //使用CDS_UPDATEREGISTRY表示次修改是持久的, //并在注册表中写入了相关的数据 } else { AfxMessageBox("修改失败,恢复原有设置"); ChangeDisplaySettings(NULL,0); } } 得到当前的屏幕的显示分辨率,GetDeviceCaps(HORZRES);GetDeviceCaps(VERTRES);然后对你的程序进行相应的设置 可以改变自已程序的界面,将每个控件的位置都计算出来.看下面这个例子,在窗口大小改变时,窗口里的控件也跟着调整位置.void CEmail::OnSize(UINT nType, int cx, int cy) { CFormView::OnSize(nType, cx, cy); // TODO: Add your message handler code here if(nType==SIZE_RESTORED && cx>=522 && cy>=386) { CWnd *pwnd; CRect rect; pwnd=(CWnd *)GetDlgItem(IDC_COMBO_CATALOG); if(pwnd==NULL)return; pwnd->GetWindowRect(&rect); ScreenToClient(&rect); rect.right=cx-15; rect.left=rect.right - 90; pwnd->MoveWindow(&rect,TRUE); pwnd=(CWnd *)GetDlgItem(IDC_LIST); if(pwnd==NULL)return; pwnd->GetWindowRect(&rect); ScreenToClient(&rect); rect.right=cx-10; rect.bottom=rect.top+cy/3+20; pwnd->MoveWindow(&rect,TRUE); ((CListCtrl *)pwnd)->SetColumnWidth(1, rect.Width()-274); pwnd=(CWnd *)GetDlgItem(IDC_RICHEDIT); if(pwnd==NULL)return; rect.top=rect.bottom+5; rect.bottom=cy-10; pwnd->MoveWindow(&rect,TRUE); }} 那对话框怎么改,没有CDC对象? m_ScreenX=GetSystemMetrics(SM_CXSCREEN); m_ScreenY=GetSystemMetrics(SM_CYSCREEN); SetWindowPos(NULL,0,0,m_ScreenX,m_ScreenY,SWP_NOZORDER); 最彻底的方法就是在WM—SIZE和WM—SIZEING里自己移动控件 如何让文档程序带参(文件路径)执行? 请教大家如何再次联系女孩子? 急待解决:ocx和inf打包成cab,放在web服务器上。打开网页时提示安装并运行,但是下载失败! 诚问这个界面是如何实现的! 请教一下。谢 搞不懂,睡不着觉啦 WIN32平台上最好的VC开发包(IFC)---免费发送 刚接触mfc,连错误提示都看不懂 有人能给我详细解释一下GDI位图和DIB位图的区别吗 引用资源文件以后的问题。 为什么用StretchBlt缩放后,再用GetBitmapBits就不行了? 问一个有关绘图得问题
LONG ChangeDisplaySettings(
LPDEVMODE lpDevMode,
DWORD dwflags
);
参数含义
lpDevMode:一个指向DEVMODE数据结构的指针,描述了欲设定显示器的各类属性。Dwflags:表明对显示设备的修改方式。
void CChngDsplyMdDlg::OnChagne()
{
UpdateData(TRUE);
DEVMODE lpDevMode;
lpDevMode.dmBitsPerPel = m_nBitsPerPixel;
lpDevMode.dmPelsWidth = m_nWidthPixels;
lpDevMode.dmPelsHeight = m_nHeightPixels;
lpDevMode.dmSize = sizeof(lpDevMode);
lpDevMode.dmFields = DM_PELSWIDTH|DM_PELSHEIGHT|DM_BITSPERPEL;
LONG result = ChangeDisplaySettings(&lpDevMode,0);
if(result == DISP_CHANGE_SUCCESSFUL)
{
AfxMessageBox("修改成功");
ChangeDisplaySettings(&lpDevMode,CDS_UPDATEREGISTRY);
//使用CDS_UPDATEREGISTRY表示次修改是持久的,
//并在注册表中写入了相关的数据
}
else
{
AfxMessageBox("修改失败,恢复原有设置");
ChangeDisplaySettings(NULL,0);
}
}
GetDeviceCaps(HORZRES);
GetDeviceCaps(VERTRES);
然后对你的程序进行相应的设置
看下面这个例子,在窗口大小改变时,窗口里的控件也跟着调整位置.
void CEmail::OnSize(UINT nType, int cx, int cy)
{
CFormView::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
if(nType==SIZE_RESTORED && cx>=522 && cy>=386)
{
CWnd *pwnd;
CRect rect;
pwnd=(CWnd *)GetDlgItem(IDC_COMBO_CATALOG);
if(pwnd==NULL)return;
pwnd->GetWindowRect(&rect);
ScreenToClient(&rect);
rect.right=cx-15;
rect.left=rect.right - 90;
pwnd->MoveWindow(&rect,TRUE); pwnd=(CWnd *)GetDlgItem(IDC_LIST);
if(pwnd==NULL)return;
pwnd->GetWindowRect(&rect);
ScreenToClient(&rect);
rect.right=cx-10;
rect.bottom=rect.top+cy/3+20;
pwnd->MoveWindow(&rect,TRUE);
((CListCtrl *)pwnd)->SetColumnWidth(1, rect.Width()-274); pwnd=(CWnd *)GetDlgItem(IDC_RICHEDIT);
if(pwnd==NULL)return;
rect.top=rect.bottom+5;
rect.bottom=cy-10;
pwnd->MoveWindow(&rect,TRUE);
}
}
m_ScreenY=GetSystemMetrics(SM_CYSCREEN);
SetWindowPos(NULL,0,0,m_ScreenX,m_ScreenY,SWP_NOZORDER);