MFC使用笔记
来源:互联网 发布:db2分页查询sql详解 编辑:程序博客网 时间:2024/06/08 08:16
1 弹窗显示
AfxMessageBox(L"显示字符");
2 输出字符串(ChildView)
CDC *cDC = this->GetDC();//获得当前窗口的DCCDC mcdc;mcdc.CreateCompatibleDC(NULL);CString str;str.Format(_T("字符串%d"),a);//格式与printf相似mcdc.SetTextColor(RGB(255, 255, 255));//设置字体颜色mcdc.SetBkMode(TRANSPARENT);//背景透明mcdc.SetBkColor(RGB(0, 0, 0));//设置字体背景颜色mcdc.TextOut(0, 0, str);//输出到缓存cDC->BitBlt(0,0,200,200, &mcdc, 0, 0, SRCCOPY);//输出到窗口
3 绘图(ChildView)
CDC *cDC = this->GetDC(); //获得当前窗口的DC CDC mcdc;mcdc.CreateCompatibleDC(NULL);//创建兼容dcCBitmap m;m.LoadBitmap(IDB_BITMAP1);//导入图片m_bgcDC.SelectObject(&m);//绘制到缓存中cDC->BitBlt(0,0,800,600, &mcdc, 0, 0, SRCCOPY);//绘制到窗口Invalidate(FALSE);//更新画面ReleaseDC(cDC);//释放窗口DC
4 设置图标(MainFrm)
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){ if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; // 创建一个视图以占用框架的工作区 if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW, CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL)) { TRACE0("未能创建视图窗口\n"); return -1; } HICON ico1, ico2; ico1 = AfxGetApp()->LoadIcon(IDI_ICON1); ico2 = AfxGetApp()->LoadIcon(IDI_ICON2); SetIcon(ico1, TRUE); //设置大图标 SetIcon(ico2, FALSE); //设置小图标 SetMenu(NULL);//设置菜单栏为空 return 0;}
5 设置窗口大小(MFCApplication1)
BOOL CMFCApplication1App::InitInstance(){ /*……*/ m_pMainWnd->SetWindowPos(NULL, 0, 0, 820, 642, SWP_NOMOVE); m_pMainWnd->ShowWindow(SW_SHOW); m_pMainWnd->UpdateWindow(); /*……*/}
6 三缓冲(ChildView)
做动画时发现,透明部分有时会停留在上一帧的部分。下面是根据双缓冲技术进化而来三缓冲技术(原创)
CPaintDC dc(this);CDC *cDC = this->GetDC();//获得当前窗口的DC CDC mdc1,mdc2,*mdc;//mdc1是一级缓存,mdc2是二级缓存,mdc是一级缓存的指针mdc = &mdc1;mdc1.CreateCompatibleDC(NULL);mdc2.CreateCompatibleDC(NULL);CBitmap m1,m2;//mdc1是一级缓存位图,mdc2是二级缓存位图m1.CreateCompatibleBitmap(cDC, 650, 650);m2.CreateCompatibleBitmap(cDC, 650, 650);mdc1.SelectObject(&m1);mdc2.SelectObject(&m2);mdc1.FillSolidRect(0, 0, 650, 650, RGB(0, 0, 0));mdc2.FillSolidRect(0, 0, 650, 650, RGB(0, 0, 0));/*绘制的图画*/mdc->TransparentBlt(0, 0, 650, 650, &mdc2, 0, 0, 650, 650, RGB(255, 255, 255));cDC->BitBlt(0, 0, 650, 650, mdc, 0, 0, SRCCOPY);Invalidate(FALSE);//更新画面ReleaseDC(cDC);//释放窗口DC中加载PNG图片**
(1)需定义下面的函数
static bool LoadImageFromResource(IN CImage* pImage, IN UINT nResID, IN LPCWSTR lpTyp){ if (pImage == NULL) return false; pImage->Destroy(); HRSRC hRsrc = ::FindResource(AfxGetResourceHandle(), MAKEINTRESOURCE(nResID), lpTyp); if (hRsrc == NULL) return false; HGLOBAL hImgData = ::LoadResource(AfxGetResourceHandle(), hRsrc); if (hImgData == NULL) { ::FreeResource(hImgData); return false; } LPVOID lpVoid = ::LockResource(hImgData); LPSTREAM pStream = NULL; DWORD dwSize = ::SizeofResource(AfxGetResourceHandle(), hRsrc); HGLOBAL hNew = ::GlobalAlloc(GHND, dwSize); LPBYTE lpByte = (LPBYTE)::GlobalLock(hNew); ::memcpy(lpByte, lpVoid, dwSize); ::GlobalUnlock(hNew); HRESULT ht = ::CreateStreamOnHGlobal(hNew, TRUE, &pStream); if (ht != S_OK) { pStream->Release(); GlobalUnlock(hNew); GlobalFree(hNew); FreeResource(lpByte); return 0; } else { pImage->Load(pStream); pStream->Release(); GlobalUnlock(hNew); GlobalFree(hNew); FreeResource(lpByte); } ::FreeResource(hImgData); return true;}ageFromResource(&m, IDB_PNG1, L"PNG");
(2)使用
CImage m;LoadImageFromResource(&m,IDB_PNG1,L"PNG");
8 PNG透明
(1)需定义下面的函数
void TransparentPNG(CImage *png){ for(int i = 0; i <png->GetWidth(); i++) { for(int j = 0; j <png->GetHeight(); j++) { unsigned char* pucColor = reinterpret_cast<unsigned char*>(png->GetPixelAddress(i , j)); pucColor[0] = pucColor[0] *pucColor[3] / 255; pucColor[1] = pucColor[1] *pucColor[3] / 255; pucColor[2] = pucColor[2] *pucColor[3] / 255; } }}
(2)使用
CImage m;TransparentPNG(&m);
1 0
- MFC使用笔记
- MFC弹出菜单使用笔记
- MFC学习笔记_ComboBox的基本使用
- demon使用MFC listBox 和 checkbox笔记
- MFC学习笔记:CArchive类的使用
- MFC下CListCtrl的使用笔记
- MFC中使用函数的简略笔记
- C++MFC编程笔记day06 MFC向导、MFC绘图类使用
- C++MFC编程笔记day06 MFC向导、MFC绘图类使用
- MFC笔记
- mfc笔记
- MFC 笔记
- MFC笔记
- MFC笔记
- MFC笔记
- MFC笔记
- MFC笔记
- MFC笔记
- Android Studio Error running app IDE or the Gradle plugin to the latest version
- hdu1099(map用法)
- 计算机视觉与图像处理(一)——卷积与opencv
- 121 122 123 188 Best Time to Buy and Sell Stock
- Elasticsearch 简介
- MFC使用笔记
- Windows和Linux环境之间文件系统挂载方法
- 【每日一课】1、什么是java?
- 数组中只出现一次的两个数字
- 【py交易】算法竞赛入门经典5.4.4 多少块土地 python
- Servlet 编写Filter过滤器
- ASCII码排序
- 在swift中debug的环境下使用log输出
- Android音频系统之AudioTrack(二)