请教各位做过gui底层的高手:
                              在view中,当用户将一个按钮放置在界面上,并调整大小都适合为止,window有自己的机制去绘制用户调整后的按钮。我想问的是,这些机制是怎么实现的?就算我知道用户调整后的大小(坐标),但按钮如果是3d颜色的话,那应该如何处理?程序如何实现?技术界面GUI

解决方案 »

  1.   

    窗口 数据都在 m_hWnd 里, 微软 不想给你 内幕,所以 给你一个 HANDLE (void*).
    例如 窗口 大小 位置 风格, 都在 m_hWnd 的 某偏移处。
    所以 一切 都从 m_hWnd 开始。
      

  2.   

    还有什么更好的方法获取window生成的gui界面数据?
      

  3.   

    难道不成要自己根据算法算出来,再paint???
      

  4.   

    由于 m_hWnd 的结构未知,你只能调用 已有的 API,(可能 还有 未入 文档的 API),别无他法。
      

  5.   

    真的除了截图或者printwindow之外,别无他法获取gui图形数据吗?
      

  6.   

     happyparrot jiangsheng VisualEleven 
      

  7.   

    如果控件能自己画自己的话,windows会发送消息给控件,让控件执行自己定义的绘图代码。否则控件就默认采用系统提供的绘制方法。按钮是3D就自己画出3D呗,直接贴张位图最简单了,就是那个动态效果有点麻烦。
      

  8.   

    你问的很糊涂
    ,其实WINDOWS的实现不就是那些消息吗?
    如果是你自己绘制按钮
    那你自己处理ONPAINT,WMMOUSEMOVE, WMMOUSELBDOWN 等消息
    自己想怎样,就怎样楼
      

  9.   

    我问的问题并不含糊,就是除了截图外,还有没有方法用windows提供的api获取类似按钮这样的gui图形数据
    如按钮的rgb数值等。
      

  10.   

    标准的非自绘按钮可以用 GetSysColor 取颜色 
     COLOR_BTNFACE 
     COLOR_BTNSHADOW
     COLOR_BTNTEXT
     COLOR_BTNHIGHLIGHT然后用 DrawFrameControl 来绘制
      

  11.   

    GetSysColor 能获取按钮点阵颜色吗?我想要把颜色数据放到数组里面。
      

  12.   

    获得RGB,干嘛不用GetPixel直接能获取关键点的RGB值
      

  13.   

    可要知道用getpixel效率低并且很难在其他窗口遮挡的情况下使用。
      

  14.   

    tiger9991 的想法跟截图是一个样的。
      

  15.   

    首先问一下,这个按钮是不是你自己绘制的?(OnPaint 或者 DrawItem)
    如果是,那很好办,比如
    class MyBtn : class CButton
    {
    public:
    void Draw(){  做绘制 }
    void OnPaint(){}
    };
    你给MyBtn发一个消息WM_MY_DRAW,传递一个HBITMAP参数,MyBtn收到消息后就调用Draw函数绘制到HBTIMAP中,之后你可以CBitmap的Attch它,获取rgb或者BYTE数组就很容易了
      

  16.   

    “我问的问题并不含糊,就是除了截图外,还有没有方法用windows提供的api获取类似按钮这样的gui图形数据
    如按钮的rgb数值等。”
    1.GetDC
    2.GetObject
    3.分析 bmp