这个问题 其实是一个最实用 而且很难搞清楚的问题 希望各位耐心 全面 仔细的给在下讲解以及分析 最好有源代码可以供参考 因为好多时候即使明白了各位的意思 但是却不知道在哪个位置加代码 至今这个问题没有一个人能真正解决问题描述:当在宽屏界面下做的程序 分辨率是 1440 X 900  程序的界面里有圆  有控件  (圆都是正圆) 但是当改变此电脑分辨率时  如改变到1024 X 768 或者 800 X 600 时  圆就变形了 变成了扁的  而且有的圆超出了圆的外接矩形  尤其是在800*600的情况下 矩形里面的圆和其他图形 都超出矩形的边界  我想达到一种效果:无论电脑分辨率改变成什么  都叫图形是正圆 而且圆不超出它外接矩形的边界  或者可以这样说 我的理解就是锁定控件以及图形的尺寸 但是我觉得这个代码我一点思路都没有  所以请高手讨论一下 到底怎么解决  到底是什么原因引起的圆的变形 以及圆为何超出外接矩形的边界。。我说过了 这个问题实用 且难解决 希望大家仔细 认真讨论 越全面越好  代码希望也拿出来共享一下  

解决方案 »

  1.   

    RECT   rc;   
    GetSystemMetrics(SM_CXSCREEN)
    GetSystemMetrics(SM_CYSCREEN)获得屏幕大小,然后根据得到的结果进行自己计算处理,进一步得到圆的半径
      

  2.   


    像素都还不够精确,Windows在屏幕上绘图的时候使用的单位是一种叫Tiwp的东西,至今不知道中文应该叫什么.只要能够在不同分辨率下得到相应长度的twip值就可以实现楼主的要求了.不过这方面的细节我也正在查资料,知道的兄弟说一声!
      

  3.   

    两种情况:一种是屏幕纵横比例正常,那么只要你使用纵横一样的大小绘制圆,总是一样的效果,一种是纵横比例不一致,那么可以用GetDeviceCpas函数获取DC的纵横比例,自己计算需要的修正因子,改变绘图参数。另外对于映射模式,使用SetMapMode设置,MM_ANISOTROPIC纵横比例总是一样的,也就是不会改变;而MM_ISOTROPIC纵横比例会根据窗口大小修正,其余映射模式都是固定坐标系,自己根据需要选择吧。
      

  4.   

    同意12楼,感觉根据你说的情况应该用MM_ISOTROPIC.
      

  5.   

     感觉根据你说的情况应该用MM_ISOTROPIC.  同意
      

  6.   

    我用过了  可以实现在不同比例的电脑上(4:3和16:10的电脑) 画出来的都是正圆,但是我还想在这个前提下,同时实现在每台电脑改变分辨率的情况下也叫他是正圆,其实这个我也实现了,我想把两个综合起来,意思就是:无论在任何一台电脑上的任何分辨率下,画出的圆都保证是正圆。我现在可以实现在同一台电脑上的任何分辨率下画出来的都是正圆(利用的是自己算出来的算法),也实现了在不同比例电脑的最佳分辨率下画出来的圆是正圆(利用的是MM_ISOTROPIC的映射方式),我想把2者综合。请各位再帮忙讨论一下。
      

  7.   

    在onsize中处理控件的大小和位置,大小和位置,根据不同的分辨率自己设定。
    if (IsWindow(m_font00.GetSafeHwnd())) {
    m_font00.MoveWindow((int )x*0.04,( int )y*0.07,( int )(50*rate1),( int )(800*rate2),TRUE);
    }