mfc电脑屏幕分辨率修改怎么去修改

查看:4027|回复:6
中级工程师
32位色,16位色,
最好c语言或者c++的代码
(11.54 KB)
看窗体的初始化部分,这些设置一般在设定之后存到某某文件里,然后在重启之后由文件读进来初始化的,牵涉到刷新频率的话,可能要看看OPENGL或DIRECTX那些吧。
程序设计,算法为王。
提出问题;分析问题;确定算法;画出流程图;编辑程序;调试程序;建立文档资料。
大家在开发板块贴代码的时候,请使用“插入代码”的功能。
[code]int main(){return 0;}[/code]
中级工程师
win7系统的位色
& &这两个API 吗?
ChangeDisplaySettingsEx ,ChangeDisplaySettings
我还不会用 ,,
EnumDisplaySettings实现了
中级工程师
发出来大家试试.
21:14, 下载次数: 236
分享解决方案
中级工程师
复制内容到剪贴板代码:& &&&// TODO: Place code here.
& & & & DEVMODE
& & & & int Height=0,Width=0;
& & & & dm.dmSize = sizeof(DEVMODE) ;
& & & & EnumDisplaySettings(NULL,ENUM_CURRENT_SETTINGS,&dm);
& & & & // int&&g_Height=dm.dmPelsH
& & & & //int&&g_Width=dm.dmPelsW& & & &
& & & & dm.dmBitsPerPel = 32;
& & //dm.dmPelsWidth = 1366; //这里实现分辨率的宽度
& & //dm.dmPelsHeight = 768; //分辨率的高度
&&//&&dm.dmFields = DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;
& & LONG result = ChangeDisplaySettings(&dm,0);
中级工程师
我只实现了改变分辨率,至于位色其实也差不多,留着楼主自己去玩吧,我的环境是:操作系统windows server 2008, 编成工具vs2010。复制内容到剪贴板代码://ChangeMetrics.cpp
#ifndef UNICODE
& && &&&#define UNICODE
#ifdef UNICODE
& && &&&#ifndef _UNICODE
& && && && && & #define _UNICODE
& && &&&#endif
#include &Windows.h&
#include &WindowsX.h&
#include &tchar.h&
#include &strsafe.h&
#include &resource.h&
#define chHANDLE_DLGMSG(hWnd, message, fn)& && && && && && && && && && &&&\
& && &&&case (message): return (SetDlgMsgResult(hWnd, uMsg,& && &&&\
& && && && && & HANDLE_##message((hWnd), (wParam), (lParam), (fn))))
TCHAR szAppName[] = TEXT(&ChangeMetrics&);
HWND hwndL
HWND hwndD
int index = 0;
int prevIndex = 0;
int SysMetrics[][2] = {{800, 600}, {}, {}, {}};
BOOL Dlg_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
& && &&&SetWindowText(hwnd, szAppName);& && &
& && &&&int x = GetSystemMetrics(SM_CXSCREEN) / 2;
& && &&&int y = GetSystemMetrics(SM_CYSCREEN) / 2;
& && &&&RECT
& && &&&GetClientRect(hwnd, &rect);
& && &&&int width = rect.right - rect.
& && &&&int heigth = rect.bottom - rect.
& && &&&MoveWindow(hwnd, x - width / 2&&, y - rect.bottom, width, heigth, FALSE);
& && &&&hwndList = GetDlgItem(hwnd, IDC_Select);
& && &&&ComboBox_ResetContent(hwndList);
& && &&&SetWindowRedraw(hwndList, FALSE);
& && &&&for(int i = 0; i & 4; i++)
& && && && && & TCHAR buffer[12];
& && && && && & StringCchPrintf(buffer, _countof(buffer), TEXT(&%d × %d&), SysMetrics[0], SysMetrics[1]);
& && && && && & ComboBox_AddString(hwndList, buffer);
& && && && && & ComboBox_SetItemData(hwndList, i, i);
& && &&&ComboBox_SetCurSel(hwndList, 0);
& && &&&SetWindowRedraw(hwndList, TRUE);
& && &&&InvalidateRect(hwndList, NULL, TRUE);
& && &&&return TRUE;
void ChangeMetrics()
& && &&&DEVMODE
& && &&&ZeroMemory(&mode, sizeof(mode));
& && &&&mode.dmSize = sizeof(mode);
& && &&&EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &mode);
& && &&&mode.dmPelsWidth = SysMetrics[index][0];
& && &&&mode.dmPelsHeight = SysMetrics[index][1];
& && &&&mode.dmFields = DM_PELSHEIGHT | DM_PELSWIDTH;
& && &&&ChangeDisplaySettings(&mode, 0);
void Dlg_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
& && &&&switch(id)
& && && && && & case IDC_OK:
& && && && && && && && &if(prevIndex != index)
& && && && && && && && &{
& && && && && && && && && && &&&ChangeMetrics();
& && && && && && && && &}
& && && && && && && && &
& && && && && & case IDCANCEL:
& && && && && && && && &EndDialog(hwnd, 0);
& && && && && && && && &
& && && && && & case IDC_Select:
& && && && && && && && &if(codeNotify == CBN_SELCHANGE)
& && && && && && && && &{
& && && && && && && && && && &&&prevIndex =
& && && && && && && && && && &&&index = ComboBox_GetCurSel(hwndList);
& && && && && && && && &}
& && && && && && && && &
INT_PTR WINAPI Dlg_Proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
& && &&&switch(uMsg)
& && && && && & chHANDLE_DLGMSG(hwnd, WM_INITDIALOG, Dlg_OnInitDialog);
& && && && && & chHANDLE_DLGMSG(hwnd, WM_COMMAND, Dlg_OnCommand);
& && &&&return FALSE;
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE, PTSTR pszCmdLine, int ComdShow)
& && &&&DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG), NULL, Dlg_Proc);
& && &&&return 0;
//resource.h
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by ChangeMetrics.rc
#define IDD_DIALOG& && && && && && && & 101
#define IDC_OK& && && && && && && && &&&1001
#define IDC_Select& && && && && && && & 1002
// Next default values for new objects
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE& && &&&102
#define _APS_NEXT_COMMAND_VALUE& && && &40001
#define _APS_NEXT_CONTROL_VALUE& && && &1003
#define _APS_NEXT_SYMED_VALUE& && && &&&101
#endif参考书目《windows via c/c++》、《windows程序设计第五版》。关键API参考MSDN Library
本帖最后由 紫色枫叶 于
09:30 编辑
中级工程师
我把代码稍微修改了一下,传上来给大家参考学习。
(116.02 KB)
10:15, 下载次数: 288&&&&&&&&&&&&&&&&&&
posts - 139,comments - 115,trackbacks - 0
//检测当前分辨率
int Width = GetSystemMetrics(SM_CXSCREEN);
int Height = GetSystemMetrics(SM_CYSCREEN);
DEVMODE lpDevMode0;
lpDevMode0.dmBitsPerPel=32;
lpDevMode0.dmPelsWidth=W
lpDevMode0.dmPelsHeight=H
lpDevMode0.dmSize=sizeof(lpDevMode0);
lpDevMode0.dmFields =DM_PELSWIDTH|DM_PELSHEIGHT|DM_BITSPERPEL;
DEVMODE lpDevM
lpDevMode.dmBitsPerPel=32;
lpDevMode.dmPelsWidth=1024;
lpDevMode.dmPelsHeight=768;
lpDevMode.dmSize=sizeof(lpDevMode);
lpDevMode.dmFields =DM_PELSWIDTH|DM_PELSHEIGHT|DM_BITSPERPEL;
result=ChangeDisplaySettings(&lpDevMode,0);
if (result==DISP_CHANGE_SUCCESSFUL)
//MessageBox("修改成功!");
ChangeDisplaySettings(&lpDevMode,CDS_UPDATEREGISTRY);
  //使用CDS_UPDATEREGISTRY表示次修改是持久的,
  //并在注册表中写入了相关的数据
MessageBox("修改成功!还原");
ChangeDisplaySettings(&lpDevMode0,CDS_UPDATEREGISTRY);
//MessageBox("修改失败,恢复原有设置!");
ChangeDisplaySettings(NULL,0);
出处:http://blog.csdn.net/nat_myron/article/details/8502009
阅读(...) 评论()VC MFC 怎么设置窗口自适应分辨率。_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
VC MFC 怎么设置窗口自适应分辨率。
可以调用::GetSystemMetrics(SM_CXSCREEN),::GetSystemMetrics(SM_CYSCREEN),返回横纵分辨率,然后根据分辨率改变窗口大小改变窗口大小可以使用MoveWindow函数
我有更好的答案
某一种分辨率下窗口窗口的长宽比例应该是知道的。比如在分辨率下,窗口的宽高如果是a*b,则窗口宽高(用x,y表示)与分辨率的关系应该是:x=::GetSystemMetricsSM_CXSCREEN)*a&#47::GetSystemMetrics(SM_CYSCREEN)*b/768,至于窗口的位置,其实也就是一个数学计算问题。计算的窗口的初始位置后,根据新的位置和长宽定义一个并初始化一个CRect变量;1024,y=
不知道比例额,我窗口是用控件拖的,还有你说的是在初始化函数中写吗?谢谢。
比例很好定呀,你现在在上面编写程序的电脑屏幕的分辨率就是初始分辨率,假设初始分辨率为j,k,此时窗口的宽高如果是a*b,则窗口宽高(用x,y表示)与分辨率的关系应该是:x=::GetSystemMetricsSM_CXSCREEN)*a/j,y=::GetSystemMetrics(SM_CYSCREEN)*b/k,如果是对话框,可以在对话框初始化函数里写,但是要把对话框属性设置为绝对对齐才起作用。
是不知道现在窗口的宽和高各是多少。有没有函数可以获得窗口宽和高的呢。
有这样的函数,GetWindowRect这个函数就可以获取窗口的长宽及位置。
还是不会用。
CRect rcWGetWindowRect(rcWindow);GetWindowRect函数获取窗口在屏幕的矩形区域并保存到rcWindow中。
采纳率:56%
你既已知晓,何须此问?
知道分辨率,但是不知道该怎么算窗口的大小。
在另外一贴已回复。
为您推荐:
其他类似问题
mfc的相关知识
等待您来回答

我要回帖

更多关于 屏幕分辨率修改 的文章

 

随机推荐