Add a separator and our menu item to system menu. CString StrMenuItem(_T ("New menu item")); pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_MYSYSITEM, StrMenuItem); … } 十三、运行其它
程序 //1、运行 EMAIL 或网址 char szMailAddress[80]; strcpy(szMailAddress,"mailto:netvc@21cn"); ShellExecute(NULL, "open", szMailAddress, NULL, NULL, SW_SHOWNORMAL); //2、运行可执行程序 WinExec("notepad.exe",SW_SHOW); //运行计事本 十四、动态增加或删除菜单 1、 增加菜单 //添加 CMenu *mainmenu; mainmenu=AfxGetMainWnd()->GetMenu(); //得到主菜单 (mainmenu->GetSubMenu (0))->AppendMenu (MF_SEPARATOR);//添加分隔符 (mainmenu->GetSubMenu (0))->AppendMenu(MF_STRING,ID_APP_ABOUT,_T("Always on &;Top")); //添加新的菜单项 DrawMenuBar(); //重画菜单 2、 删除菜单 //删除 CMenu *mainmenu; mainmenu=AfxGetMainWnd()->GetMenu(); //得到主菜单 CString str ; for(int i=(mainmenu->GetSubMenu (0))->GetMenuItemCount()-1;i>=0;i--) //取得菜 单的项数。 { (mainmenu->GetSubMenu (0))->GetMenuString(i,str,MF_BYPOSITION); //将指定菜单项的标签拷贝到指定的缓冲区。MF_BYPOSITION 的解释见上。 if(str=="Always on &;Top") //如果是刚才我们增加的菜单项,则删除。 { (mainmenu->GetSubMenu
(0))->DeleteMenu(i,MF_BYPOSITION); break; } 十五、改变应用程序的图标 静态更改: 修改图标资源 IDR_MAINFRAME。它有两个图标,一个是 16*16 的,另一个是 32*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 类的变量。 十七、剪切板上通过增强元文件拷贝图像数据 下面代码拷贝通过元文件拷贝图像数据到任何应用程序,其可以放置在 CView 派生类的函 数中。 CMetaFileDC * m_pMetaDC = new CMetaFileDC(); m_pMetaDC->CreateEnhanced(GetDC(),NULL,NULL,"whatever"); //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)); 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 代表选定区域 { HDC hScrDC, hMemDC; // 屏幕和内存设备描述表 HBITM