当前位置:首页 > VC常用操作源码汇总
{
(mainmenu->GetSubMenu (0))->DeleteMenu(i,MF_BYPOSITION); break; }
改变应用程序的图标
静态更改: 修改图标资源IDR_MAINFRAME。它有两个图标,一个是16*16的,另一个是3 2*32的,注意要一起修改。
动态更改: 向主窗口发送WM_SETICON消息.代码如下: HICON hIcon=AfxGetApp()->LoadIcon(IDI_ICON); ASSERT(hIcon);
AfxGetMainWnd()->SendMessage(WM_SETICON,TRUE,(LPARAM)hIcon);
改变窗口标题的方法
使用语句 CWnd* m_pCWnd = AfxGetMainWnd( ),然后,再以如下形式调用SetWindowTe xt()函数:
SetWindowText( *m_pCWnd,(LPCTSTR)m_WindowText);// m_WindowText可以是一个CSt ring类的变量。
如果需要经常修改窗口的标题(注:控件也是窗口),应该考虑使用半文档化的函数AfxSetWindowText。该函数在AFXPRIV.H中说明,在WINUTIL.CPP中实现,在联机帮助中找不到它,它在AFXPRIV.H中半文档化, 在以后发行的MFC中将文档化。 AfxSetWindowText的实现如下:
voik AFXAPI AfxSetWindowText (HWND hWndCtrl , LPCTSTR IpszNew ) {
itn nNewLen= Istrlen (Ipaznew) TCHAR szOld [256]
//fast check to see if text really changes (reduces flash in the controls )
if (nNewLen >_contof (szOld)
|| : : GetWindowText (hWndCrtl, szOld , _countof (szOld) !=nNewLen || Istrcmp (szOld , IpszNew)! = 0 {
7
//change it
: : SetWindowText(hWndCtrl , IpszNew ) } }
剪切板上通过增强元文件拷贝图像数据
下面代码拷贝通过元文件拷贝图像数据到任何应用程序,其可以放置在CView派生类的函 数中。
CMetaFileDC * m_pMetaDC = new CMetaFileDC();
m_pMetaDC->CreateEnhanced(GetDC(),NULL,NULL,\ //draw meta file
//do what ever you want to do: bitmaps, lines, text... //close meta file dc and prepare for clipboard;
HENHMETAFILE hMF = m_pMetaDC->CloseEnhanced(); //copy to clipboard OpenClipboard(); EmptyClipboard();
::SetClipboardData(CF_ENHMETAFILE,hMF); CloseClipboard(); //DeleteMetaFile(hMF); delete m_pMetaDC;
剪切板上文本数据的传送
把文本放置到剪接板上: CString source; //put your text in source if(OpenClipboard()) {
HGLOBAL clipbuffer; char * buffer; EmptyClipboard();
clipbuffer = GlobalAlloc(GMEM_DDESHARE, source.GetLength()+1); buffer = (char*)GlobalLock(clipbuffer); strcpy(buffer, LPCSTR(source));
8
GlobalUnlock(clipbuffer);
SetClipboardData(CF_TEXT,clipbuffer); CloseClipboard(); }
从剪接板上获取文本: char * buffer; if(OpenClipboard()) {
buffer = (char*)GetClipboardData(CF_TEXT); //do something with buffer here //before it goes out of scope }
CloseClipboard();
捕捉屏幕图像到剪切板中
void CShowBmpInDlgDlg::OnCutScreen() {
ShowWindow(SW_HIDE);
RECT r_bmp={0,0,::GetSystemMetrics(SM_CXSCREEN),
::GetSystemMetrics(SM_CYSCREEN)}; HBITMAP hBitmap;
hBitmap=CopyScreenToBitmap(&r_bmp); //hWnd为程序窗口句柄 if (OpenClipboard()) {
EmptyClipboard();
SetClipboardData(CF_BITMAP, hBitmap); CloseClipboard(); }
ShowWindow(SW_SHOW); }
HBITMAP CShowBmpInDlgDlg::CopyScreenToBitmap(LPRECT lpRect) {
//lpRect 代表选定区域
9
{
HDC hScrDC, hMemDC; // 屏幕和内存设备描述表 HBITMAP hBitmap, hOldBitmap; // 位图句柄 int nX, nY, nX2, nY2; // 选定区域坐标 int nWidth, nHeight; // 位图宽度和高度 int xScrn, yScrn; // 屏幕分辨率
// 确保选定区域不为空矩形 if (IsRectEmpty(lpRect)) return NULL;
//为屏幕创建设备描述表
hScrDC = CreateDC(\ //为屏幕设备描述表创建兼容的内存设备描述表 hMemDC = CreateCompatibleDC(hScrDC); // 获得选定区域坐标 nX = lpRect->left; nY = lpRect->top; nX2 = lpRect->right; nY2 = lpRect->bottom; // 获得屏幕分辨率
xScrn = GetDeviceCaps(hScrDC, HORZRES); yScrn = GetDeviceCaps(hScrDC, VERTRES); //确保选定区域是可见的 if (nX<0) nX = 0; if (nY<0) nY = 0; if (nX2>xScrn) nX2 = xScrn; if (nY2>yScrn)
10
共分享92篇相关文档