Direct Draw 画到主表面的图,居然在移动窗口的时候不跟着走 本帖最后由 nabasasun 于 2013-06-22 01:36:06 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 //下面动作执行的时候都要更新窗口,没有看到你的翻转页面的代码case WM_MOVE: break;case WM_SIZE: break; 在paint下绘制是没有问题的。Present()执行了吗?,还要弄清楚窗口区域跟屏幕区域 GetClientRect( s_hWnd, &s_rcClient ); ClientToScreen( s_hWnd, (POINT*)&s_rcClient ); 窗口又不是全屏,没有那个filp的写法 lpDDSPrimary->Blt(&rc1,lpDDSBJ,NULL,DDBLT_WAIT,NULL); //背景注意第三个参数 找到问题了,不是窗口大小, 也不是第三个源矩形大小,而是这个转换函数的获取客户区,导致我全部图片都是背景图那么大 GetClientRect(hWnd,&rc); ClientToScreen(hWnd,(LPPOINT)&rc); ClientToScreen(hWnd,(LPPOINT)&rc + 1); DDRAW 窗口模式 其实 是把画面 放到 客户区上的, 看起来像是 窗口模式, 有点欺骗大家。 因此 窗口模式时候,必须时刻 跟踪 窗口客户区坐标,吧这个RECT 做为全局变量。 然后窗口模式下只能BLT 图像。 此时要用检测的客户区RECT 来BLT 首先,你应该把客户区左上角坐标转换成 屏幕坐标,这个函数百度搜索下就可以了。那这个坐标是,不用想了,肯定是0,0.好把这个坐标转换成屏幕好了,你会说0,0 型吗,当然可以,因为此函数 关键是看 窗口句柄,这样就可以确定是哪个窗口位置了好,这些做完就可以确定客户区坐标了 你可能会说在调用转换函数,哦,不用了,有了左上角屏幕坐标,右下角也就有了,直接分别加上您设置的全局常量 分辨率就可以了。 可能你会说,分辨率是客户区大小吗。 恩,所以在创建完主窗口的时候,你需要重新改变窗口大小,让窗口客户区为真实的,自己需要的分辨率,否则 一开始创建的窗口整体的宽高才是你所设定的,客户区是小于所设定的,这样是不正确的。 这些函数你可以搜索下了。大致会用到 移动窗口函数, 会根据所需要的客户区 来创建窗口,并且您还能设置窗口位置,比如 显示在 正中间 在vc2008中运行和调试都没错,但是直接双击程序运行会报错,怎么回事,谁遇到过? 【急切求助】如何改变文本框内部分内容的字体颜色? 如何隐藏/显示任务栏 求救!!!!!!!!!!!!!!!!!!!!!!!!!!!! 删除类 CSocket 的问题 ****知道2个DATE类型的时间,求2个时间的差,有没有现成的函数?**** 关于dll,在线等待 急!如何写能钩中文输入的钩子? COM\CORBA\EJB的前景如何?哪个好些?请讨论! win32 程序 GDI+ 绘图是黑的 如何 得到枚举类型enum的 所有值中的 最大的值??
case WM_MOVE: break;
case WM_SIZE: break;
GetClientRect( s_hWnd, &s_rcClient );
ClientToScreen( s_hWnd, (POINT*)&s_rcClient );
窗口又不是全屏,没有那个filp的写法
注意第三个参数
ClientToScreen(hWnd,(LPPOINT)&rc + 1);
好,这些做完就可以确定客户区坐标了 你可能会说在调用转换函数,哦,不用了,有了左上角屏幕坐标,右下角也就有了,直接分别加上您设置的全局常量 分辨率就可以了。 可能你会说,分辨率是客户区大小吗。 恩,所以在创建完主窗口的时候,你需要重新改变窗口大小,让窗口客户区为真实的,自己需要的分辨率,否则 一开始创建的窗口整体的宽高才是你所设定的,客户区是小于所设定的,这样是不正确的。 这些函数你可以搜索下了。大致会用到 移动窗口函数, 会根据所需要的客户区 来创建窗口,并且您还能设置窗口位置,比如 显示在 正中间