sunnyli3166 2014-12-15 01:19 采纳率: 36.4%
浏览 2301

MFC绘图撤销问题 急急急!

各位,帮忙看下啊。。我在MFC单文档中实现透明桌面和白色背景绘图2中模式。现在有个问题是透明桌面时,撤销与返回程序执行但是没效果?、调试时显示OK,就是直接运行时没效果啊?/急急急!

void CMainFrame::OnPizhu()
{
// TODO: Add your command handler code here

CMainFrame* frm=(CMainFrame*)AfxGetApp()->m_pMainWnd;
CHDrawView* pView=(CHDrawView*)frm->GetActiveView();
CHDrawDoc* pDoc=(CHDrawDoc*)frm->GetActiveDocument();   
pDoc->OnDrawClear();
pDoc->DeleteContents();
if(DeleteAll("C:\\Windows\\Temp3\\"))
{
    pDoc->m_backup.RemoveAll();
}
else
    AfxMessageBox("ERROR");

pDoc->m_picType = PIC_poly;
pDoc->m_picColor = RGB(0,0,0);
pDoc->m_picWidth = 1;
pDoc->m_picStyle = PS_SOLID;
pDoc->m_cavasH = 1000;
pDoc->m_cavasW =1500;

pDoc->m_backup_index =0;
pDoc->BackUp();

Width   = GetSystemMetrics(SM_CXSCREEN);    
Heigth  = GetSystemMetrics(SM_CYSCREEN);
MoveWindow(40,50,Width-100,Heigth-100);
ShowWindow(SW_HIDE);
Sleep(100);
ShowWindow(SW_SHOW);
CWnd*  wnd = GetDesktopWindow();  
CWindowDC cdc(wnd);  
memdc.CreateCompatibleDC(&cdc);  
btmp.CreateCompatibleBitmap(&cdc, Width, Heigth); 
memdc.BitBlt(0,0, Width,  Heigth, &cdc, 0, 0, SRCCOPY); 
ShowWindow(SW_SHOW);
pView->flags=2;

void CMainFrame::OnUndo()
{
CMainFrame* frm=(CMainFrame*)AfxGetApp()->m_pMainWnd;
CHDrawDoc* pDoc=(CHDrawDoc*)frm->GetActiveDocument();

pDoc->OnEditUndo();
pDoc->UpdateAllViews(NULL);
}

void CHDrawView::OnDraw(CDC* pDC)

{
CHDrawDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here

OnPrepareDC(pDC);
if(flags==1)
{
    CClientDC dc(this);
    CRect   rect;  
    GetClientRect(&rect);     //得到窗体的大小  
    CDC   dcMem;    
    dcMem.CreateCompatibleDC(&dc);    
    CBitmap   bmpBackground;  
    bmpBackground.LoadBitmap(IDB_BITMAP2);//加载背景图片

    BITMAP   bitMap;  
    bmpBackground.GetBitmap(&bitMap);  
    CBitmap   *pbmpOld=dcMem.SelectObject(&bmpBackground);  
    dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitMap.bmWidth,bitMap.bmHeight,SRCCOPY); 

void CHDrawDoc::ReStore(BOOL backward)

{
m_backup_index -= backward ? 1 : -1;
//make m_backup[m_backup_index] the current document data
int num=m_backup.GetSize();
if((m_backup_indexm_backup.GetSize())
{
MessageBox(NULL,"操作错误","Warning",MB_OK|MB_ICONWARNING);
}

else
{
    OnOpenDocument(m_backup.GetAt(m_backup_index-1));
}

}

  • 写回答

1条回答 默认 最新

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘