如题

解决方案 »

  1.   

    BitBlt函数方法:GDI的BitBlt函数的功能是将图形数据块从一个位置搬移到另一个位置,源和目标位图可以在同一个设备文本对象,也可以在不同的设备文本对象,函数原型如下:    BitBlt(HDC hDC,int x,int y,int cx,int cy,HDC hDCSrc,int xSrc,int ySrc,DWORD dwRop);
    参数dwRop为光栅操作码,决定位图的显示方式,这里介绍三个下面画透明位图需要用到的的光栅操作码:
        光栅操作码:MERGEPAINT
        效果:源的反向"或上"目标(即:dest=(NOT src) OR dest)
        说明:白色或上任何颜色都等于白色;黑色或上任何颜色颜色都不变     光栅操作码:NOTSRCERASE
        效果:源的反向"与上"目标的反向(即:dest=(NOT src) AND (NOT dest))
        说明: 黑色与上任何颜色都等于黑色;白色与上任何颜色颜色都不变    光栅操作码:SRCINVERT
        效果:源与目标"异或"起来(即:dest=src XOR dest)
        说明:黑色与任何颜色异或都等于原来颜色;白色与任何颜色异或都等于原来颜色的反色
      

  2.   

    类似于选择一段文字,比如白底黑字的一段文字,我选择其中一些,那选中部分就变为了白字蓝底。(也就是说,文字和背景统统颜色取反,但是限定在一个rect中)。
    由于我的应用包含图画,所以需要所有色彩全部取反:)
      

  3.   

    SetROP2 () 可以设置 R2_XORPEN ,然后用 LINETO() 什么的画白线,就取反了. 一楼的方法也行.
    如果在ONPAINT中,直接这么调用.如果不在ONPAINT 中, 先调用 GETDC(),...,最后调用RELEASEDC().EDIT 的选中文字,应该不是用取反的方法.
      

  4.   

    everandforever(Forever) :我不是画线,我不是往pDC上添加东东,而是改变其颜色
    romanticist(让我拥抱你入梦):dcMem.BitBlt(0,0,m_nWidth,m_nHeight,&dcScreen,rect.left,rect.top,SRCINVERT);发现颜色和以前一样