当前位置: 代码迷 >> WinCE >> EVC4.0,怎么调整程序界面对话框尺寸和屏幕一样大小
  详细解决方案

EVC4.0,怎么调整程序界面对话框尺寸和屏幕一样大小

热度:365   发布时间:2016-04-28 11:53:07.0
EVC4.0,如何调整程序界面对话框尺寸和屏幕一样大小?
  如题,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资源做的比较差,不够直观,一般都是跑一下看看对话框于屏幕差距,然后手动调整,只要调整一个出来的,以后大概就知道长宽的比例是多少了。
------解决思路----------------------
  要动态调整,这个工作量比较大、且如何分布也要自己事前计算好,这样比较麻烦哦

还是搞一个和实际设备分辨率一样的模拟器吧。
------解决思路----------------------
引用:
2,3楼的方法是没有办法的办法了,我见别人些的程序无论下载到多大屏幕上都能布满屏幕。

是有办法。codeporject上有一个动态创建所有控件的例子,所有界面内容就写在xml里面。
现在很多手机的界面也是这样动态创建,只要写好各种不同分辨率的xml就可以。
------解决思路----------------------
wince项目一般不用考虑不同屏幕自动适应的问题吧,弄这套框架也不是几行代码就可以实现的事情。
------解决思路----------------------
引用:
2,3楼的方法是没有办法的办法了,我见别人些的程序无论下载到多大屏幕上都能布满屏幕。


你要一定想弄,也可以啊!把窗体大小与各个控件的坐标写在一个配置文件中,窗体初始化时读这个配置文件,动态调整每个控件的位置,这样就可以达到你想要的效果。
对于每个控件,你是想动态创建、还是先放好控件的个数再调整位置,都可以的。

只是工作量的问题,没有实现不了的。