如题,EVC4.0手机模拟器屏幕分辨率是320*240的,程序界面设计的对话框大的话显示不全,如何改变对话框尺寸和屏幕一样,并且控件大小也随着变。我解决方法如下:
/////////////////////////////////////////////////////////////////////////////////////////////////
//1.获得屏幕尺寸
int cxClient=::GetSystemMetrics(SM_CXSCREEN); //屏幕尺寸
int cyClient=::GetSystemMetrics(SM_CYSCREEN); //屏幕尺寸
int cbClient=::GetSystemMetrics(SM_CYCAPTION); //标题栏窗口高度
CRect rtClient,rtBtn;
CWnd *pWnd=GetDlgItem(IDC_BUTTON1);
//2.获得对话框客户区屏幕尺寸
GetClientRect(&rtClient); //获取对话框坐标
ClientToScreen(&rtClient); //映射为屏幕坐
//3.获得button控件尺寸
pWnd->GetWindowRect(&rtBtn);
//4.求变化系数(现在屏幕尺寸比上原对话框尺寸)
int scale = cxClient/rtClient.Width();
//5.求的现有对话框当前RECT
rtBtn.left = rtBtn.left*scale;
rtBtn.top = rtBtn.top*scale;
rtBtn.right = rtBtn.right*scale;
rtBtn.bottom = rtBtn.bottom*scale;
MoveWindow(CRect(0,0+cbClient,cxClient,cyClient)); //移动窗口
pWnd->MoveWindow(rtBtn); //移动button
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
在第二步出现了问题,我原意是获取程序开发时设计界面对话框大小,而实际获得的是292*240,是模拟器手机屏幕的客户区分辨率,所的变化比例系数永远是1,没有变化。求指教。
------解决思路----------------------
mfc资源做的比较差,不够直观,一般都是跑一下看看对话框于屏幕差距,然后手动调整,只要调整一个出来的,以后大概就知道长宽的比例是多少了。
------解决思路----------------------
要动态调整,这个工作量比较大、且如何分布也要自己事前计算好,这样比较麻烦哦
还是搞一个和实际设备分辨率一样的模拟器吧。
------解决思路----------------------
是有办法。codeporject上有一个动态创建所有控件的例子,所有界面内容就写在xml里面。
现在很多手机的界面也是这样动态创建,只要写好各种不同分辨率的xml就可以。
------解决思路----------------------
wince项目一般不用考虑不同屏幕自动适应的问题吧,弄这套框架也不是几行代码就可以实现的事情。
------解决思路----------------------
你要一定想弄,也可以啊!把窗体大小与各个控件的坐标写在一个配置文件中,窗体初始化时读这个配置文件,动态调整每个控件的位置,这样就可以达到你想要的效果。
对于每个控件,你是想动态创建、还是先放好控件的个数再调整位置,都可以的。
只是工作量的问题,没有实现不了的。