一个MFC对话框程序,主窗口嵌入一个子窗口,子窗口上有一个Picture控件,在Picture控件上绘图,然后通过获取它的HDC,调用GetCurrentObject(hDC, OBJ_BITMAP)去获取位图,但是取出的位图却是主窗口的,据说是因为DC没有分离?有什么解决办法?

解决方案 »

  1.   

    不用这么麻烦吧,CStatic自己有一个相关的函数啊:
    CStatic::GetBitmap
      

  2.   

    你上面所说的绘图是用什么绘的呢?控件的DC绘图的话,直接用SelectObject加载另一个位图,返回的就是原来的位图。
      

  3.   


    回复于: 2013-02-23 17:29:45 
    引用 2 楼 PC_9527 的回复:
    引用 1 楼 wltg2001 的回复:不用这么麻烦吧,CStatic自己有一个相关的函数啊:
    CStatic::GetBitmap这个控件被子类化处理了,这样来处理好像不行,一调用就出错了。
    子类化应该不会产生这个问题的。 取出来的数据为空.....
    这个是jpg流数据,最初的方案是内存的image数据转HBITMAP(必须是HBITMAP),感觉开销很大,如果能直接GetCurrentObject那最好,省很多事,SelectObject是不可以行的,只要是从DC获取,必然是主窗口的位图,有没有方法让DC独立,不共用一个DC场景,对于一般的窗口可以让它创建的时候让它成为单独的窗口,没有父窗口,或者修改类样式,这个是在窗口上的控件子类化,构造函数里没有办法去重新注册类,当然也许我的思路就错了,还请高手指教,谢谢
      

  4.   

    getdc(传入picturecontrol的m_hwnd)不行么?
      

  5.   

    这个是jpg流数据,最初的方案是内存的image数据转HBITMAP(必须是HBITMAP),感觉开销很大,如果能直接GetCurrentObject那最好,省很多事,SelectObject是不可以行的,只要是从DC获取,必然是主窗口的位图,有没有方法让DC独立,不共用一个DC场景,对于一般的窗口可以让它创建的时候让它成为单独的窗口,没有父窗口,或者修改类样式,这个是在窗口上的控件子类化,构造函数里没有办法去重新注册类,当然也许我的思路就错了,还请高手指教,谢谢 
    ==============
    JPG数据流可能不会成功,GDI本身不支持JPG,只支持BITMAP
      

  6.   

    但是画在DC场景的数据应该是可以通过GetCurrentObject获取的,只是现在的问题是DC是共用的,在DC上有多幅位图吧?如何让Static控件和它的父窗口DC分离?
      

  7.   


    句柄是正确的,好像GetBitmap只能取picture控件预先设置好的,或者是SetBitmap设置的位图才可以获取。