VC常用操作源码汇总 联系客服

发布时间 : 星期三 文章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