大致程序:
如此创建一个窗口
AtlAxWinInit();
if (pcw == NULL)
pcw = new CAxWindow();
if (pcw->IsWindow())
pcw->DestroyWindow(); RECT rc=rect;
AdjustWindowRect(&rc, 0, FALSE);
pcw->Create(NULL, &rc, flash_clsid_c, 0);然后
       viewobject->Draw(DVASPECT_CONTENT, -1, NULL, NULL, NULL, hdcCompatible, &rectl, &rectl, NULL, NULL);
注释:
//程序目的:画出一个directx控件显示的内容
//IViewObjectEx *viewobject
//rectl = rc
//hdcCompatible是块绘图内存(大小同rc)
这样虽然是能画出来,但是画出来的位置不是正在pcw窗口上,而是向右上角偏移了一段距离,这是什么原因?希望帮忙解释一下!

解决方案 »

  1.   

    要注意Windows客户区Rect和windows非客户区Rect是不同的。
      

  2.   

    用ClientToScreen或者ScreenToClient转换后试试。
      

  3.   

    终于找到问题的原因了
    RECT rc={0,0,400,400};
    pcw->Create(NULL, &rc, flash_clsid_c, 0);
    pcw->GetClientRect(&rc);
    // rc={0,0,394,368} ?????????????现请教原因以及解决方法!!!
      

  4.   

    目前,临时解决方案pcw->Create(NULL, &rc, flash_clsid_c, 0); pcw->ResizeClient(rc.right,rc.bottom); // 将rc={0,0,394,368}改回来!pcw->GetClientRect(&rc);但是为什么会这样呢?
    MSDN上连一点说明都没有!!!!