15,979
社区成员
发帖
与我相关
我的任务
分享
C x=new c();
C->create(/**/);//若干个参数包括父窗口B;
C-setrowcount(1);
c->setcolcount(1);
pDC->StretchBlt(sourcePos.left, sourcePos.top,
(sourcePos.Width()), (sourcePos.Height()),
pGrid->GetDC(),
0, 0,
griddevicerect.Width(), griddevicerect.Height(),
SRCCOPY);
auto rect=CRect();
pGrid->GetWindowRect(&rect);
pDC->StretchBlt(parentlogicrect.left, parentlogicrect.top,//parentlogicrect 是父窗口的大小
parentlogicrect.Width(), parentlogicrect.Height(),
pGrid->GetDC(),
0, 0,
gridlogicrect.Width(), gridlogicrect.Height(),
SRCCOPY);
2.怎么擦除那个缩略图呢 就是我拖动那个矩形框嵌套里面的表格会移动 但是我那个缩略图的位置还是不变。。。我想移动之后擦除在重画
BOOL CopyWnd2DC(HDC hDC, RECT rcRect, HWND hWnd)
{
BOOL bRet = FALSE;
if(hDC && hWnd && IsWindow(hWnd))
{
//保存DC
int nSaveDC = SaveDC(hDC);
//获取窗口坐标
RECT rcWnd;
GetWindowRect(hWnd, &rcWnd);
//获取窗口DC
HDC hWndDC = GetWindowDC(hWnd);
if(hWndDC != NULL)
{
//设置缩放模式
SetStretchBltMode(hDC, HALFTONE);
//缩放贴图
StretchBlt(hDC,
rcRect.left, rcRect.top,
rcRect.right - rcRect.left, rcRect.bottom - rcRect.top,
hWndDC,
0, 0,
rcWnd.right - rcWnd.left, rcWnd.bottom - rcWnd.top,
SRCCOPY);
//释放DC
ReleaseDC(hWnd, hWndDC);
bRet = TRUE;
}
//恢复DC
RestoreDC(hDC, nSaveDC);
}
return bRet;
}
void CSdi7View::OnDraw(CDC* pDC)
{
/*
CSdi7Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
*/
//计算器
HWND hWnd = ::FindWindow(_T("CalcFrame"), NULL);
CopyWnd2DC(pDC->m_hDC, CRect(0,0, 200, 200), hWnd);
}
bitblt
bitblt
C->ShowWindow(true);
pDC->BitBlt(0, 0, gridrect.Width(), lprect.Height(),pGrid->GetDC(), 0, 0, SRCCOPY);
之后就变成了这样通过 剪贴板
1 两个窗口 是不是 在 一个 进程 里 ? 2 要复制 客户区 还是 整个 窗口 ?
BOOL CopyWnd2DC(HDC hDC, RECT rcRect, HWND hWnd) { BOOL bRet = FALSE; if(hDC && hWnd && IsWindow(hWnd)) { //保存DC int nSaveDC = SaveDC(hDC); //获取窗口坐标 RECT rcWnd; GetWindowRect(hWnd, &rcWnd); //获取窗口DC HDC hWndDC = GetWindowDC(hWnd); if(hWndDC != NULL) { //设置缩放模式 SetStretchBltMode(hDC, HALFTONE); //缩放贴图 StretchBlt(hDC, rcRect.left, rcRect.top, rcRect.right - rcRect.left, rcRect.bottom - rcRect.top, hWndDC, 0, 0, rcWnd.right - rcWnd.left, rcWnd.bottom - rcWnd.top, SRCCOPY); //释放DC ReleaseDC(hWnd, hWndDC); bRet = TRUE; } //恢复DC RestoreDC(hDC, nSaveDC); } return bRet; } void CSdi7View::OnDraw(CDC* pDC) { /* CSdi7Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; */ //计算器 HWND hWnd = ::FindWindow(_T("CalcFrame"), NULL); CopyWnd2DC(pDC->m_hDC, CRect(0,0, 200, 200), hWnd); }
HWND hWnd = ::FindWindow(_T("CalcFrame"), NULL);----》auto hWnd=pGrid->getsafeHwnd(); //换成了我那个表格的hwnd,应该没有关系吧?? 我不太懂
1 两个窗口 是不是 在 一个 进程 里 ? 2 要复制 客户区 还是 整个 窗口 ?
BOOL CopyWnd2DC(HDC hDC, RECT rcRect, HWND hWnd) { BOOL bRet = FALSE; if(hDC && hWnd && IsWindow(hWnd)) { //保存DC int nSaveDC = SaveDC(hDC); //获取窗口坐标 RECT rcWnd; GetWindowRect(hWnd, &rcWnd); //获取窗口DC HDC hWndDC = GetWindowDC(hWnd); if(hWndDC != NULL) { //设置缩放模式 SetStretchBltMode(hDC, HALFTONE); //缩放贴图 StretchBlt(hDC, rcRect.left, rcRect.top, rcRect.right - rcRect.left, rcRect.bottom - rcRect.top, hWndDC, 0, 0, rcWnd.right - rcWnd.left, rcWnd.bottom - rcWnd.top, SRCCOPY); //释放DC ReleaseDC(hWnd, hWndDC); bRet = TRUE; } //恢复DC RestoreDC(hDC, nSaveDC); } return bRet; } void CSdi7View::OnDraw(CDC* pDC) { /* CSdi7Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; */ //计算器 HWND hWnd = ::FindWindow(_T("CalcFrame"), NULL); CopyWnd2DC(pDC->m_hDC, CRect(0,0, 200, 200), hWnd); }