类似进程通信的文图额,我用一个进程Client.exe一些内容写进剪贴板,然后用Server.exe接受,我想用的是Server.exe监听Client将位图改变的消息,也就是剪贴板的的改变,然后Server.exe随时能接受到将之改变为Client.exe的要求改变的样子!但是我出了问题,说什么内存不能读!
首先我用的2个WM_...和WM_..消息大家懂的!
我Server程序主要代码:
static int flag=0;
// TODO: Add your message handler code here
if(OpenClipboard())
{
if(IsClipboardFormatAvailable(CF_BITMAP))
{

DC=GetDC();
memDC.CreateCompatibleDC(DC);
Bitmap.Attach(hBitmap);
HBITMAP hBitmap=(HBITMAP)GetClipboardData(CF_BITMAP);

LPRECT lp=new RECT;
POINT pt;
GetClientRect(lp);
pt.x=1*(lp->right - lp->left);
pt.y=1*(lp->bottom - lp->top);
hBmpOld = ::SelectObject(memDC.m_hDC, hBitmap); 
DC->StretchBlt( 0, 0,pt.x ,pt.y , &memDC, 0, 0,80,80, SRCCOPY );

}
CloseClipboard();
}

解决方案 »

  1.   

    我的Client程序大致代码:
    if(OpenClipboard()){
     
    HGDIOBJ hBmpOld=::SelectObject(memDC.m_hDC,hBitmap);

    EmptyClipboard();
    }
    SetClipboardData(CF_BITMAP,Bitmap.m_hObject);
    CloseClipboard();

    }
      

  2.   

    yes就是这个意思
    用剪贴板!谢谢...
      

  3.   

    http://wenku.baidu.com/view/2d4a9ec42cc58bd63186bd20.html
      

  4.   

    求人来围观啊!...这怎么搞得啊,我昨天晚上弄了下!这下不是不能read了!  出现新的问题了,Server.exe不能随时根据剪贴板变化了,就是我Client.exe给剪贴板内容变化了,但是Server.exe不能反应。但是我把2个.exe都关了,在打开Server,他就出现了我Client.exe想要的内容了!什么情况啊?这是什么原因啊?有谁给解释一下好吗?
      

  5.   

    我很不明白,你无非就是实时想要更改一个位图,用tcp长连接图像内存都直接可以传来传去,搞什么剪贴板啊,这不自找麻烦么
      

  6.   

    我都想死了,弄了快4天了...一开始的时候做了个软件就是改位图的,boos不通过要进程通信的,这不改成剪贴板进程通信...进程通信吧,以前没用过,用起来真是烦死了! 我弄得这个2个进程一个发送过去一个能打开剪贴板但是不能也能得到剪贴板的内容但是我调用::SelectObject(memDC.m_hDC,hBitmap);选入内存的时候就是失败!但是我把2个.exe关掉,在打开Server.exe时,又能显示!
      

  7.   

    这真的是太奇怪了,我不知道错在哪里额!真心难...关掉Server.exe、Client.exe后,在打开Server.exe咦又能显示,我真是无奈啊!!
      

  8.   

    我断点调试的时候感觉能得到剪贴板的内容但是就是调用::selectObject的时候失败,导致不能显示出来!但是为什么关了2个.exe又能显示呢?
    xuddk727
    知道吗?求教啊?
      

  9.   

    真心的收获很大,我通过个人的努力,加上我坚强的毅力...我终于攻破了难关!真是一点不小心纠错了,其实我发现一点小错误会影响很大,弄得我刚刚一个不小心将我的一个Client.exe shift+delete删了,弄了一下才给它又重新做了一个!我勒个去...谢谢大家了...