MFC中bitblt拷贝的问题

我需要在mfc中拷贝原图再在相同的位置把图片粘贴回来,我自己写的小程序也能够正确做到,但是不知道为啥在我修改别人的程序时粘贴时就出了问题。
无操作原图:
图片说明
当我进行简单的自身拷贝自身时:
pDC->BitBlt(LpRect.left +100, LpRect.top, 200, 1688, pDC, LpRect.left, LpRect.top, SRCCOPY);
图片:
图片说明
但是当我复制后再粘贴时:
CDC curveDC;
CBitmap bitmap,*pOldBitmap;
curveDC.CreateCompatibleDC(rectinfo.testDC);
bitmap.CreateCompatibleBitmap(rectinfo.testDC,200,1688);
pOldBitmap = curveDC.SelectObject(&bitmap);

curveDC.BitBlt(0, 0, 200, 1688, pDC, LpRect.left, LpRect.top, SRCCOPY); 
pDC->BitBlt(LpRect.left +100, LpRect.top, 200, 1688,    &curveDC, 0,0, SRCCOPY);

图片说明
想不明白为什么会出现黑色框中多余的线条,是我复制的时候哪里出错了?
程序在http://share.weiyun.com/53c6af81c21f26b95d21027b0eda2c22

安装步骤为
解压后最好放在e盘根目录下
1 解压后运行Graphic.sln编译通过后,以管理员身份运行cmd,
根据具体目录注册ocx,例如 regsvr32 E:\GraphicOcx\Graphic\Debug\Graphic.ocx
2 运行test目录下的WindowsFormsApplication1.sln并编译成功
2 在Graphic的vs中,项目->属性->配置属性->调试->命令
导入test目录下的exe路径,例如E:\GraphicOcx\Test\WindowsFormsApplication1\
WindowsFormsApplication1\bin\Debug\WindowsFormsApplication1.exe
3 如果界面出现则表示运行成功。如果不成功提示模板错误等
则修改GraphicOcx\Graphic\Debug下的Graphic.ini中DataPath路径和TemplateName路径为自己的实际路径

我提问的代码在Curve.cpp的1100行左右

1个回答

代码如下: @Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {
String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);
if (reason != null) {
// Log.e(TAG, "action:" + action + ",reason:" + reason);
if (mListener != null) {
if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) {
// 短按home键

mListener.onHomePressed();
} else if (reason
.equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) {
// 长按home键

mListener.onHomeLongPressed();
} else if (SYSTEM_DIALOG_REASON_ASSIST.equals(reaso

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
MFC中图像无法使用双缓冲拷贝

我接手了别人的程序,需要使用双缓冲绘图,程序中定义的内存对象pDC可以绘制任何曲线,绘制完毕后复制给窗体。但是内存对象pDC就不能进行BitBlt操作,哪怕是自身平移拷贝自身都不可以。pDC->BitBlt(0, 0, rect.Width(), rect.Height(),pDC, 10, 10, SRCCOPY);不知道是pDC哪里设置有了问题?

MFC中OnPaint函数显示BMP图片的问题

为什么我在MFC对话框中,在OnPaint函数中加入以下代码,BMP图像不能显示啊~~· BITMAP bm; CBitmap bmp; bmp.LoadBitmap(IDB_BITMAP1); CDC memdc; CDC dc; memdc.CreateCompatibleDC(&dc);/ bmp.GetBitmap(&bm); CBitmap *bmpold=memdc.SelectObject(&bmp);/ dc.BitBlt(20,20,bm.bmWidth,bm.bmHeight,&memdc,0,0,SRCCOPY); memdc.SelectObject(bmpold); memdc.DeleteDC(); bmp.DeleteObject(); 求助啊求助啊

关于mfc pic与位图大小的问题

我在pic控件的属性页里 通过选择type类型为位图显示了一幅图片,但是图片和pic控件大小不匹配,如何使得pic控件的大小适应位图大小? 我是新手,请各位大神说的详细一点,小弟先谢过了~

MFC 双缓存绘图出现黑边的问题

//CDialog::OnPaint(); CPaintDC dc(this); // 目标A桌子 RECT myRect; GetDlgItem(IDC_STATIC)->GetWindowRect(&myRect); ScreenToClient(&myRect); //ScreenToClient(&myRect); //GetClientRect(&myRect);//获取桌子大小 long nWidth=myRect.right - myRect.left; long nHigth=myRect.bottom - myRect.top; CDC tempdc;//B桌子 CBitmap MemBitmap;//新桌布 CBitmap*OldBitmap;//旧桌布 tempdc.CreateCompatibleDC(NULL); //实体化B桌子 MemBitmap.CreateCompatibleBitmap(&dc,nWidth,nHigth);//实体化给B使用的桌布 //这里是拷贝了A的位图,自己用张图片也行,大小注意下 OldBitmap=tempdc.SelectObject(&MemBitmap); //给B使用 tempdc.FillSolidRect(&myRect,RGB(0,255,255)); //默认黑色,自己按需改变 //............... //在B桌布上画画,tempdc dc.BitBlt(myRect.left ,myRect.top, nWidth, nHigth, &tempdc,0,0,SRCCOPY); //拷贝给A tempdc.SelectObject(OldBitmap); //恢复B原有的桌布(习惯吧,就像申请内存后记得释放) //删除临时对象 MemBitmap.DeleteObject(); tempdc.DeleteDC(); Invalidate(FALSE); 上面是在:OnPaint() 函数现在添加的代码 本意是想在IDC_STATIC这个控件中用内存画图的方法 填充颜色,为啥控件没有填充满绿色,会出现黑边呢?

关于BitBlt函数显示位图时的图片分割问题

最近在做一个远程监控程序,被控方截图发送到监控方然后显示,但是在显示时,发现图片左边一部分被切割到了右边,这是怎么产生的? 已经将截图文件和接收的文件对比过了,图片文件没出错,感觉应该错在显示上,我是用的BitBlt函数显示的,不知道出了什么问题。 显示功能的代码如下 BOOL CMFCApplication4Dlg::onEraseBkgnd(CDC* pDC) { CDC DCmem; DCmem.CreateCompatibleDC(pDC); CBitmap bitmap; bitmap.m_hObject = GetBitmapFromData(); CRect rect; GetClientRect(&rect); CBitmap *pOldBit = DCmem.SelectObject(&bitmap); BITMAP bmpinfo; bitmap.GetBitmap(&bmpinfo); pDC->BitBlt(0, 0, rect.Width(), rect.Height(), &DCmem, 0, 0, SRCCOPY); /*pDC->SetStretchBltMode(STRETCH_HALFTONE); pDC->StretchBlt(0, 0, rect.Width(), rect.Height(), &DCmem, 0, 0, bmpinfo.bmWidth, bmpinfo.bmHeight,SRCCOPY);*/ DCmem.DeleteDC(); bitmap.DeleteObject(); //ReleaseDC(&DCmem); return TRUE; }

mfc中如何解决屏幕闪烁

void CTestView::OnDraw(CDC* pDC) { CTestDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here CRect rect; GetClientRect(&rect);//获取客户区大小 //画背景 棋盘等 static bool i=0; if(!i) { bmpbegin.LoadBitmap(IDB_BEGIN); begindc.CreateCompatibleDC(pDC); begindc.SelectObject(&bmpbegin); bmpend.LoadBitmap(IDB_END); enddc.CreateCompatibleDC(pDC); enddc.SelectObject(&bmpend); bmpback.LoadBitmap(IDB_BACK); backdc.CreateCompatibleDC(pDC); backdc.SelectObject(&bmpback); bmpback.GetBitmap(&backbmp); i=1; } pDC>StretchBlt(20,20,rect.Width()-130,rect.Height()-30,&backdc,0,0,backbmp.bmWidth,backbmp.bmHeight,SRCCOPY); pDC->BitBlt(rect.Width()-100,70,100,50,&begindc,0,0,SRCCOPY); pDC->BitBlt(rect.Width()-100,150,100,50,&enddc,0,0,SRCCOPY); //棋盘坐标赋值 /*************************************************************************/ float mapw,maph;//格子长度 mapw =((float)rect.Width()-130.0)/14.0; maph =((float)rect.Height()-30.0)/14.0; int mapi,mapj; for(mapi=0;mapi<15;mapi++) { for(mapj=0;mapj<15;mapj++) { (mappoint[mapi][mapj]).x=20+mapi*mapw; (mappoint[mapi][mapj]).y=20+mapj*maph; } } /*************************************************************************/ //画棋子 CBrush backbrush(RGB(0,0,0)); CBrush whitebrush(RGB(255,255,255)); for(mapi=0;mapi<15;mapi++) { for(mapj=0;mapj<15;mapj++) { if(backmap[mapi][mapj]||whitemap[mapi][mapj]) { CPoint p1,p2; p1.x=mappoint[mapi][mapj].x-maph/2; p1.y=mappoint[mapi][mapj].y-maph/2; p2.x=mappoint[mapi][mapj].x+maph/2; p2.y=mappoint[mapi][mapj].y+maph/2; if(backmap[mapi][mapj]) pDC->SelectObject(backbrush); if(whitemap[mapi][mapj]) pDC->SelectObject(whitebrush); pDC->Ellipse(CRect(p1,p2)); } } } if(1==chess%2) str="白棋走"; if(0==chess%2) str="黑棋走"; pDC->TextOut(rect.Width()-80,20,str); str.Format("棋子数:%d",chess-1); pDC->TextOut(rect.Width()-80,40,str); }

怎样提高bitblt函数的执行效率?

如题,bitblt在win7系统中执行时间在30ms左右。有什么编程方式,让该函数执行时间在10ms以内。

Bitblt后图像出现在屏幕右上方而不是窗口中

``` void Device::Display() { hdc = GetDC(hwnd); BitBlt(hdc, 0, 0, VIEWWIDTH, VIEWHEIGHT, hdcMem, 0, 0, SRCCOPY); ReleaseDC(hwnd, hdc); for (int j = 0; j < VIEWHEIGHT; j++) { memset(frameBuffer[j], 0, VIEWWIDTH*sizeof(unsigned int)); } } void Device::Init() { hdc = GetDC(hwnd); hdcMem = CreateCompatibleDC(hdc); ReleaseDC(hwnd, hdc);//暂时断开 bmpInfo = { { sizeof(BITMAPINFOHEADER), VIEWWIDTH, -VIEWHEIGHT, 1, 32, BI_RGB, VIEWWIDTH * VIEWHEIGHT * 4, 0, 0, 0, 0 } }; LPVOID ptr; nBmp = CreateDIBSection(hdcMem, &bmpInfo, DIB_RGB_COLORS, &ptr, 0, 0); oBmp = (HBITMAP)SelectObject(hdcMem, nBmp); frameBuffer = new unsigned int*[VIEWHEIGHT]; char*framebuf = (char*)ptr; for (int j = 0; j < VIEWHEIGHT; j++) { frameBuffer[j] = (unsigned int*)(framebuf + VIEWWIDTH * 4 * j); } } ``` hwnd是CreateWindowA返回的窗口句柄。 程序运行结果是这样 ![图片说明](https://img-ask.csdn.net/upload/201601/04/1451909462_700997.jpg)

MFC中 m_hBitmap!=0问题

![图片说明](https://img-ask.csdn.net/upload/201707/28/1501224311_752335.jpg) 这个错误怎么解决啊,小白一只 求助各位大佬

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_index<1)||m_backup_index>m_backup.GetSize()) { MessageBox(NULL,"操作错误","Warning",MB_OK|MB_ICONWARNING); } else { OnOpenDocument(m_backup.GetAt(m_backup_index-1)); } }

mfc人物移动的问题,跪求!

我用的人物是图片,在onpaint函数中用bitblt函数贴图,但是我怎么将键盘的命令传进onpaint的bitblt函数中

MFC StretchBlt实现原理

本人初学图像处理,在看别人程序时看到图片缩放用了StretchBit函数,但我从书上看到位图图像放大时需要进行进行数据插值实现,我想知道StretchBit是怎样实现放大的,有没有用插值算法,如果有,是用的什么算法,如果没有又是怎样实现放大的。

MFC 实现启动画面淡入淡出的问题

``` int CSplashWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CWnd::OnCreate(lpCreateStruct) == -1) return -1; CenterWindow(); // 启动画面窗口居中 SetTimer(1, 3000, NULL); // 启动画面显示时间为 3 秒 AnimateWindow(1200, AW_BLEND); // 窗口渐显,实现淡入效果,时间 1.2 秒 return 0; } void CSplashWnd::OnClose() { AnimateWindow(800, AW_BLEND | AW_HIDE); // 窗口渐隐,实现淡出效果,时间 0.8 秒 CWnd::OnClose(); } void CSplashWnd::OnTimer(UINT_PTR nIDEvent) { KillTimer(1); // 销毁定时器 PostMessage(WM_CLOSE); // 关闭启动画面 CWnd::OnTimer(nIDEvent); } BOOL CSplashWnd::OnEraseBkgnd(CDC* pDC) { HINSTANCE hApp = ::GetModuleHandle(NULL); // 得到应用程序的模块句柄 HBITMAP hbmp = ::LoadBitmap(hApp, MAKEINTRESOURCE(IDB_BITMAP13)); //加载程序中的位图资源 HDC hmdc = ::CreateCompatibleDC(pDC->GetSafeHdc()); // 创建兼容 DC作为内存 DC HBITMAP hbmpOld = (HBITMAP) ::SelectObject(hmdc, hbmp); //将位图选入内存 DC ::BitBlt(pDC->GetSafeHdc(), 0, 0, SPLASH_WIDTH, SPLASH_HEIGHT, hmdc, 0, 0, SRCCOPY); // 将内存 DC 中的内容拷贝到设备 DC 以显示 // 清理,防止内存泄漏 ::SelectObject(hmdc, hbmpOld); ::DeleteObject(hbmp); ::DeleteDC(hmdc); return CWnd::OnEraseBkgnd(pDC); } ``` 实现启动画面淡入淡出时遇到一个疑惑。相关代码如上。按道理应该SetTimer后会响应OnTimer();但是我调试发现竟然没有。。 CSplashWnd对象的创建我是在CMainFrame的OnCreate中进行的; ``` int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { CSplashWnd* temp = new CSplashWnd(); //显示启动画面 temp->OnCreate(lpCreateStruct); Sleep(1000); temp->OnClose(); temp->~CSplashWnd(); temp = NULL; //释放内存 if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; .......... ``` temp->OnCreate(lpCreateStruct);后根本就没进入OnTimer()... 是不是我哪个地方概念没搞清楚= =

mfc显示透明背景代码看不大懂

/*-----------------显示透明背景图片-------------------*/ void CHIT_MOUSE::TransparentBitmap(HDC hdc, HBITMAP hBitmap, short xStart, short yStart, short xadd, short yadd, COLORREF cTransparentColor) { BITMAP m_bm; COLORREF cColor; // 创建临时DC HDC hMem, hBack, hObject, hTemp, hSave; hBack = CreateCompatibleDC(hdc); hObject = CreateCompatibleDC(hdc); hMem = CreateCompatibleDC(hdc); hSave = CreateCompatibleDC(hdc); hTemp = CreateCompatibleDC(hdc); // 选入位图 SelectObject(hTemp, hBitmap); GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&m_bm); POINT ptSize;//显示位图宽高 ptSize.x = m_bm.bmWidth; // 取得位图的宽度 ptSize.y = m_bm.bmHeight; // 取得位图的该度 DPtoLP(hTemp, &ptSize, 1); // 转换为逻辑点值 HBITMAP bmBack, bmObject, bmMem, bmSave;// 创建临时位图 // 单色位图 bmBack = CreateBitmap(ptSize.x, ptSize.y, 1, 1, NULL); bmObject = CreateBitmap(ptSize.x, ptSize.y, 1, 1, NULL); // 与设备兼容位图 bmMem = CreateCompatibleBitmap(hdc, ptSize.x, ptSize.y); bmSave = CreateCompatibleBitmap(hdc, ptSize.x, ptSize.y); // 将创建的临时位图选入临时DC中 HBITMAP OldbmBack, OldbmObject, OldbmMem, OldbmSave; OldbmBack = (HBITMAP)SelectObject(hBack, bmBack); OldbmObject = (HBITMAP)SelectObject(hObject, bmObject); OldbmMem = (HBITMAP)SelectObject(hMem, bmMem); OldbmSave = (HBITMAP)SelectObject(hSave, bmSave); // 设置映射模式 SetMapMode(hTemp, GetMapMode(hdc)); // 先保留原始位图 BitBlt(hSave, 0, 0, ptSize.x, ptSize.y, hTemp, 0, 0, SRCCOPY); // 将背景颜色设置为需透明的颜色 cColor = SetBkColor(hTemp, cTransparentColor); // 创建目标屏蔽码 BitBlt(hObject, 0, 0, ptSize.x, ptSize.y, hTemp, 0, 0, SRCCOPY); SetBkColor(hTemp, cColor);// 恢复源DC的原始背景色 // 创建反转的目标屏蔽码 BitBlt(hBack, 0, 0, ptSize.x, ptSize.y, hObject, 0, 0, NOTSRCCOPY); // 拷贝主DC的背景到目标DC BitBlt(hMem, 0, 0, ptSize.x, ptSize.y, hdc, xStart, yStart, SRCCOPY); // 屏蔽位图的显示区 BitBlt(hMem, 0, 0, ptSize.x, ptSize.y, hObject, 0, 0, SRCAND); // 屏蔽位图中的透明色 BitBlt(hTemp, 0, 0, ptSize.x, ptSize.y, hBack, 0, 0, SRCAND); // 将位图与目标DC的背景左异或操作 BitBlt(hMem, 0, 0, ptSize.x, ptSize.y, hTemp, 0, 0, SRCPAINT); // 拷贝目标到屏幕上 StretchBlt(hdc, xStart, yStart, ptSize.x+xadd, ptSize.y+yadd, hMem, 0, 0, ptSize.x, ptSize.y,SRCCOPY); // 恢复原始位图 BitBlt(hTemp, 0, 0, ptSize.x, ptSize.y, hSave, 0, 0, SRCCOPY); // 删除临时内存位图 DeleteObject(SelectObject(hBack, OldbmBack)); DeleteObject(SelectObject(hObject, OldbmObject)); DeleteObject(SelectObject(hMem, OldbmMem)); DeleteObject(SelectObject(hSave, OldbmSave)); // 删除临时内存DC DeleteDC(hMem); DeleteDC(hBack); DeleteDC(hObject); DeleteDC(hSave); DeleteDC(hTemp); } 这段代码的含义及用法

MFC中客户区,窗口像素的大小不统一?

//设置窗口大小 BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { if (!CFrameWnd::PreCreateWindow(cs)) return FALSE; // TODO: 在此处通过修改 // CREATESTRUCT cs 来修改窗口类或样式 //更改窗口外观 CSize size; //获取屏幕像素大小 size.cx = ::GetSystemMetrics(SM_CXSCREEN); size.cy = ::GetSystemMetrics(SM_CYSCREEN); //窗口风格 cs.style = WS_POPUPWINDOW; //去掉菜单 cs.hMenu = NULL; //窗口标题名称 cs.lpszName = _T("Button"); //自定义窗口大小, 并窗口居中显示 cs.x = (size.cx - 1200) / 2; cs.y = (size.cy - 1000) / 2; cs.cx = 1200; cs.cy = 1000; return TRUE; } //客户区大小 m_sClient.SetSize(1200, 1000); pDC->BitBlt(0, 0, m_sClient.cx, m_sClient.cy, &m_bufferDC, 0, 0, SRCCOPY);把图片贴进去 ``` ```

MFC如何插入bmp图片?

BOOL GAME::OnInitDialog() { CDialogEx::OnInitDialog(); // TODO: 在此添加额外的初始化 CDC* pDC = GetDC(); CBitmap bitmap; bitmap.LoadBitmapW(IDB_BITMAP1_1); CDC memdc; memdc.CreateCompatibleDC(pDC); memdc.SelectObject(&bitmap); pDC->BitBlt(0,0,40,40,&memdc,0,0,SRCCOPY); return TRUE; // return TRUE unless you set the focus to a control // 异常: OCX 属性页应返回 FALSE } //工程中已导入一张图片 ID为 IDB_BITMAP1_1 //上面那串代码执行完为什么没有显示图片?

MFC使用双缓存之后图像仍旧闪烁

自学的双缓存,不知道写的对不对,希望大神帮看一下~ void CTTSDlg::OnPaint() { CPaintDC dc(this); CDC MemDC; CBitmap MemBitmap; CRect PaintRect; // 双缓冲绘图 GetClientRect(PaintRect); if (MemDC.CreateCompatibleDC(&dc)) { if (MemBitmap.CreateCompatibleBitmap(&dc, PaintRect.Width(), PaintRect.Height())) { if (HGDIOBJ OldObject = MemDC.SelectObject(MemBitmap)) { // 拷贝背景图, 以处理透明色 if (MemDC.BitBlt(0, 0, PaintRect.Width(), PaintRect.Height(), &dc, 0, 0, SRCCOPY)) { Gdiplus::Graphics g(MemDC); // Paint here ... DrawGameRange(MemDC); DrawSnake(MemDC); DrawFood(MemDC); dc.BitBlt(0, 0, PaintRect.Width(), PaintRect.Height(), &MemDC, 0, 0, SRCCOPY); } MemDC.SelectObject(OldObject); } MemBitmap.DeleteObject(); } MemDC.DeleteDC(); } CDialogEx::OnPaint(); } ``` ```

MFC 位图画到 picture

CString strPath,strPname; CString strSql; strSql.Format("select * from File_info where F_id = '%s'",id); CADORecordset Rs(&CTicketSystem11App::m_DB); Rs.Open((LPCTSTR)strSql); Rs.GetFieldValue("F_path",strPath); Rs.GetFieldValue("F_mpname",strPname); CRect rect; GetClientRect(&rect); CDC *pDc=GetDlgItem(IDC_STATIC_PIC)->GetDC();//得到dc HBITMAP m_hBitmap=(HBITMAP)::LoadImage(NULL,strPath,IMAGE_BITMAP,0,0,LR_LOADFROMFILE); CBitmap m_Bitmap; m_Bitmap.Attach(m_hBitmap);//将加载进来的图像与位图相联系 CDC MemDc; MemDc.CreateCompatibleDC(pDc); MemDc.SelectObject(&m_Bitmap); pDc->BitBlt(0,0,rect.Width(),rect.Height(),&MemDc,0,0,SRCCOPY); ![图片说明](https://img-ask.csdn.net/upload/201705/19/1495207079_747750.png) ![图片说明](https://img-ask.csdn.net/upload/201705/19/1495207090_744866.png) 点击图1修改按钮在图二上面显示图片,图片名称和路径在数据库中。 好像有问题,位图名称都没有输,求指导。。

mfc关于用户区坐标与窗口坐标的问题

要加载一个背景,首先定义了一个客户区的坐标 `m_sClient.SetSize(1200, 1000) pDC->BitBlt(0, 0, m_sClient.cx, m_sClient.cy, &m_bufferDC, 0, 0, SRCCOPY);` 然后定义了初始窗口的坐标,并且把它居中 `BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { if (!CFrameWnd::PreCreateWindow(cs)) return FALSE; // TODO: 在此处通过修改 // CREATESTRUCT cs 来修改窗口类或样式 //更改窗口外观 CSize size; //获取屏幕像素大小 size.cx = ::GetSystemMetrics(SM_CXFULLSCREEN); size.cy = ::GetSystemMetrics(SM_CYFULLSCREEN); //窗口风格 cs.style = WS_POPUPWINDOW; //去掉菜单 cs.hMenu = NULL; //窗口标题名称 cs.lpszName = _T("Button"); //自定义窗口大小, 并窗口居中显示 cs.x = (size.cx - 1200) / 2; cs.y = (size.cy - 1000) / 2; cs.cx = 1200; cs.cy = 1000; return TRUE; }` 结果发现这样 ![图片说明](https://img-ask.csdn.net/upload/201807/02/1530520192_579737.png) 有一大块留白的地方

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

我以为我学懂了数据结构,直到看了这个导图才发现,我错了

数据结构与算法思维导图

String s = new String(" a ") 到底产生几个对象?

老生常谈的一个梗,到2020了还在争论,你们一天天的,哎哎哎,我不是针对你一个,我是说在座的各位都是人才! 上图红色的这3个箭头,对于通过new产生一个字符串(”宜春”)时,会先去常量池中查找是否已经有了”宜春”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此”宜春”对象的拷贝对象。 也就是说准确答案是产生了一个或两个对象,如果常量池中原来没有 ”宜春” ,就是两个。...

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

Linux面试题(2020最新版)

文章目录Linux 概述什么是LinuxUnix和Linux有什么区别?什么是 Linux 内核?Linux的基本组件是什么?Linux 的体系结构BASH和DOS之间的基本区别是什么?Linux 开机启动过程?Linux系统缺省的运行级别?Linux 使用的进程间通信方式?Linux 有哪些系统日志文件?Linux系统安装多个桌面环境有帮助吗?什么是交换空间?什么是root帐户什么是LILO?什...

将一个接口响应时间从2s优化到 200ms以内的一个案例

一、背景 在开发联调阶段发现一个接口的响应时间特别长,经常超时,囧… 本文讲讲是如何定位到性能瓶颈以及修改的思路,将该接口从 2 s 左右优化到 200ms 以内 。 二、步骤 2.1 定位 定位性能瓶颈有两个思路,一个是通过工具去监控,一个是通过经验去猜想。 2.1.1 工具监控 就工具而言,推荐使用 arthas ,用到的是 trace 命令 具体安装步骤很简单,大家自行研究。 我的使用步骤是...

学历低,无法胜任工作,大佬告诉你应该怎么做

微信上收到一位读者小涛的留言,大致的意思是自己只有高中学历,经过培训后找到了一份工作,但很难胜任,考虑要不要辞职找一份他能力可以胜任的实习工作。下面是他留言的一部分内容: 二哥,我是 2016 年高中毕业的,考上了大学但没去成,主要是因为当时家里经济条件不太允许。 打工了三年后想学一门技术,就去培训了。培训的学校比较垃圾,现在非常后悔没去正规一点的机构培训。 去年 11 月份来北京找到了一份工...

JVM内存结构和Java内存模型别再傻傻分不清了

讲一讲什么是Java内存模型 Java内存模型虽说是一个老生常谈的问题 ,也是大厂面试中绕不过的,甚至初级面试也会问到。但是真正要理解起来,还是相当困难,主要这个东西看不见,摸不着。 这是一个比较开放的题目,面试官主要想考察的是对Java内存模型的了解到了什么程度了,然后根据回答进行进一步的提问 下面,我们就这个问题的回答列一下我们的思路 具体的思路如下: 说一说Java内存模型的缘由 简略辨析...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

Google 与微软的浏览器之争

浏览器再现“神仙打架”。整理 | 屠敏头图 | CSDN 下载自东方 IC出品 | CSDN(ID:CSDNnews)从 IE 到 Chrome,再从 Chrome 到 Edge,微软与...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

搜狗输入法也在挑战国人的智商!

故事总是一个接着一个到来...上周写完《鲁大师已经彻底沦为一款垃圾流氓软件!》这篇文章之后,鲁大师的市场工作人员就找到了我,希望把这篇文章删除掉。经过一番沟通我先把这篇文章从公号中删除了...

85后蒋凡:28岁实现财务自由、34岁成为阿里万亿电商帝国双掌门,他的人生底层逻辑是什么?...

蒋凡是何许人也? 2017年12月27日,在入职4年时间里,蒋凡开挂般坐上了淘宝总裁位置。 为此,时任阿里CEO张勇在任命书中力赞: 蒋凡加入阿里,始终保持创业者的冲劲,有敏锐的...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

什么时候跳槽,为什么离职,你想好了么?

都是出来打工的,多为自己着想

程序员为什么千万不要瞎努力?

本文作者用对比非常鲜明的两个开发团队的故事,讲解了敏捷开发之道 —— 如果你的团队缺乏统一标准的环境,那么即使勤劳努力,不仅会极其耗时而且成果甚微,使用...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

终于懂了TCP和UDP协议区别

终于懂了TCP和UDP协议区别

立即提问
相关内容推荐