知识大全 介绍Visual C++中的二十个常用方法

Posted 菜单

篇首语:一日之计在于晨,一年之计在于春。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 介绍Visual C++中的二十个常用方法相关的知识,希望对你有一定的参考价值。

介绍Visual C++中的二十个常用方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  一 打开CD ROM mciSendString( Set cdAudio door open wait NULL NULL); 

  二 关闭CD_ROM

   mciSendString( Set cdAudio door closed wait NULL NULL);  

  三 关闭计算机

   OSVERSIONINFO OsVersionInfo; //包含操作系统版本信息的数据结构 OsVersionInfo dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&OsVersionInfo); //获取操作系统版本信息 if(OsVersionInfo dwPlatformId == VER_PLATFORM_WIN _WINDOWS) //Windows 调用ExitWindowsEx()函数重新启动计算机 DWORD dwReserved; ExitWindowsEx(EWX_REBOOT dwReserved); //可以改变第一个参数 实现注销用户 //关机 关闭电源等操作 // 退出前的一些处理程序   

  四 重启计算机

   typedef int (CALLBACK *SHUTDOWNDLG)(int); //显示关机对话框函数的指针 HINSTANCE hInst = LoadLibrary( shell dll ); //装入shell dll SHUTDOWNDLG ShutDownDialog; //指向shell dll库中显示关机对话框函数的指针 if(hInst != NULL) //获得函数的地址并调用之 ShutDownDialog = (SHUTDOWNDLG)GetProcAddress(hInst (LPSTR) ); (*ShutDownDialog)( );  

  五 枚举所有字体

   LOGFONT lf; lf lfCharSet = DEFAULT_CHARSET; // Initialize the LOGFONT structure strcpy(lf lfFaceName ); CClientDC dc (this); // Enumerate the font families ::EnumFontFamiliesEx((HDC) dc &lf                                                                                       (FONTENUMPROC) EnumFontFamProc (LPARAM) this ); //枚举函数 int CALLBACK EnumFontFamProc(LPENUMLOGFONT lpelf LPNEWTEXTMETRIC lpntm DWORD nFontType long lparam) // Create a pointer to the dialog window CDay Dlg* pWnd = (CDay Dlg*) lparam; // add the font name to the list box pWnd >m_ctlFontList AddString(lpelf >elfLogFont lfFaceName); // Return to continue font enumeration return ;  

  其中m_ctlFontList是一个列表控件变量

  六 一次只运行一个程序实例 如果已运行则退出

    if( FindWindow(NULL 程序标题 )) exit( );

  七 得到当前鼠标所在位置

   CPoint pt; GetCursorPos(&pt); //得到位置 

  八 上下文菜单事件触发事件 OnContextMenu事件 九 显示和隐藏程序菜单

   CWnd *pWnd=AfxGetMainWnd(); if(b_m) //隐藏菜单 pWnd >SetMenu(NULL); pWnd >DrawMenuBar(); b_m=false; else CMenu menu; menu LoadMenu(IDR_MAINFRAME); ////显示菜单 也可改变菜单项 pWnd >SetMenu(&menu); pWnd >DrawMenuBar(); b_m=true; menu Detach();  

  十 获取可执行文件的图标

  

  HICON hIcon=::ExtractIcon(AfxGetInstanceHandle() _T( NotePad exe ) ); if (hIcon &&hIcon!=(HICON) ) pDC >DrawIcon( hIcon); DestroyIcon(hIcon); 

  十一 窗口自动靠边程序演示

   BOOL AdjustPos(CRect* lpRect) //自动靠边 int iSX=GetSystemMetrics(SM_CXFULLSCREEN); int iSY=GetSystemMetrics(SM_CYFULLSCREEN); RECT rWorkArea; BOOL bResult = SystemParametersInfo(SPI_GEORKAREA sizeof(RECT) &rWorkArea ); CRect rcWA; if(!bResult) //如果调用不成功就利用GetSystemMetrics获取屏幕面积 rcWA=CRect( iSX iSY); else rcWA=rWorkArea; int iX=lpRect >left; int iY=lpRect >top; if(iX < rcWA left + DETASTEP && iX!=rcWA left) //调整左 //pWnd >SetWindowPos(NULL rcWA left iY SWP_NOSIZE); lpRect >OffsetRect(rcWA left iX ); AdjustPos(lpRect); return TRUE; if(iY < rcWA top + DETASTEP && iY!=rcWA top) //调整上 //pWnd >SetWindowPos(NULL iX rcWA top SWP_NOSIZE); lpRect >OffsetRect( rcWA top iY); AdjustPos(lpRect); return TRUE; if(iX + lpRect >Width() > rcWA right DETASTEP && iX !=rcWA right lpRect >Width()) //调整右 //pWnd >SetWindowPos(NULL rcWA right rcW Width() iY SWP_NOSIZE); lpRect >OffsetRect(rcWA right lpRect >right ); AdjustPos(lpRect); return TRUE; if(iY + lpRect >Height() > rcWA bottom DETASTEP && iY !=rcWA bottom lpRect >Height()) //调整下 //pWnd >SetWindowPos(NULL iX rcWA bottom rcW Height() SWP_NOSIZE); lpRect >OffsetRect( rcWA bottom lpRect >bottom); return TRUE; return FALSE; //然后在ONMOVEING事件中使用所下过程调用 CRect r=*pRect; AdjustPos(&r); *pRect=(RECT)r;  

  十二 给系统菜单添加一个菜单项给系统菜单添加一个菜单项需要进行下述三个步骤      首先 使用Resource Symbols对话(在View菜单中选择Resource Symbols...可以显示该对话)定义菜单项ID 该ID应大于 x F而小于 xF

  其次 调用CWnd::GetSystemMenu获取系统菜单的指针并调用CWnd:: Appendmenu将菜单项添加到菜单中 下例给系统菜单添加两个新的

   int CMainFrame:: OnCreate (LPCREATESTRUCT lpCreateStruct) … //Make sure system menu item is in the right range ASSERT(IDM_MYSYSITEM< xF ); //Get pointer to system menu CMenu* pSysMenu=GetSystemMenu(FALSE); ASSERT_VALID(pSysMenu); //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); …  

  十三 运行其它程序

   // 运行EMAIL或网址 char szMailAddress[ ]; strcpy(szMailAddress mailto: ); ShellExecute(NULL open szMailAddress NULL NULL SW_SHOWNORMAL); // 运行可执行程序 WinExec( notepad exe SW_SHOW); //运行计事本 

  十四 动态增加或删除菜单

   增加菜单

   //添加 CMenu *mainmenu; mainmenu=AfxGetMainWnd() >GetMenu(); //得到主菜单 (mainmenu >GetSubMenu ( )) >AppendMenu (MF_SEPARATOR);//添加分隔符 (mainmenu >GetSubMenu ( )) >AppendMenu(MF_STRING ID_APP_ABOUT _T( Always on &Top )); //添加新的菜单项 DrawMenuBar(); //重画菜单 

   删除菜单

   //删除 CMenu *mainmenu; mainmenu=AfxGetMainWnd() >GetMenu(); //得到主菜单 CString str ; for(int i=(mainmenu >GetSubMenu ( )) >GetMenuItemCount() ;i>= ;i ) //取得菜 单的项数 (mainmenu >GetSubMenu ( )) >GetMenuString(i str MF_BYPOSITION); //将指定菜单项的标签拷贝到指定的缓冲区 MF_BYPOSITION的解释见上 if(str== Always on &Top ) //如果是刚才我们增加的菜单项 则删除 (mainmenu >GetSubMenu ( )) >DeleteMenu(i MF_BYPOSITION); break;  

  十五 改变应用程序的图标

  静态更改 修改图标资源IDR_MAINFRAME 它有两个图标 一个是 * 的 另一个是 * 的 注意要一起修改 动态更改 向主窗口发送WM_SETICON消息 代码如下

   HICON hIcon=AfxGetApp() >LoadIcon(IDI_ICON); ASSERT(hIcon); AfxGetMainWnd() >SendMessage(WM_SETICON TRUE (LPARAM)hIcon); 

  十六 另一种改变窗口标题的方法

  使用语句 CWnd* m_pCWnd = AfxGetMainWnd( ) 然后 再以如下形式调用SetWindowText()函数 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()+ ); 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= ::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; // 屏幕和内存设备描述表 HBITMAP hBitmap hOldBitmap; // 位图句柄 int nX nY nX nY ; // 选定区域坐标 int nWidth nHeight; // 位图宽度和高度 int xScrn yScrn; // 屏幕分辨率 // 确保选定区域不为空矩形 if (IsRectEmpty(lpRect)) return NULL; //为屏幕创建设备描述表 hScrDC = CreateDC( DISPLAY NULL NULL NULL); //为屏幕设备描述表创建兼容的内存设备描述表 hMemDC = CreateCompatibleDC(hScrDC); // 获得选定区域坐标 nX = lpRect >left; nY = lpRect >top; nX = lpRect >right; nY = lpRect >bottom; // 获得屏幕分辨率 xScrn = GetDeviceCaps(hScrDC HORZRES); yScrn = GetDeviceCaps(hScrDC VERTRES); //确保选定区域是可见的 if (nX< ) nX = ; if (nY< ) nY = ; if (nX >xScrn) nX = xScrn; if (nY >yScrn) nY = yScrn; nWidth = nX nX; nHeight = nY nY; // 创建一个与屏幕设备描述表兼容的位图 hBitmap = CreateCompatibleBitmap (hScrDC nWidth nHeight); // 把新位图选到内存设备描述表中 hOldBitmap =(HBITMAP)SelectObject(hMemDC hBitmap); // 把屏幕设备描述表拷贝到内存设备描述表中 BitBlt(hMemDC nWidth nHeight hScrDC nX nY SRCCOPY); //得到屏幕位图的句柄 hBitmap = (HBITMAP)SelectObject(hMemDC hOldBitmap); //清除 DeleteDC(hScrDC); DeleteDC(hMemDC); // 返回位图句柄 return hBitmap;  

  二十 如何将位图缩放显示在Static控件中

cha138/Article/program/net/201311/12627

相关参考

投保时要注意的二十个保险术语

投保时要注意的二十个保险术语1.保险人:指与投保人订立保险合同,并承担赔偿或者给付保险金责任的保险公司。2.投保人:指与保险公司订立保险合同,并按照保险合同负有支付保险费义务的人。3.被保险人:指其身

知识大全 Visual C++ 2005中的突破性变化

VisualC++2005中的突破性变化  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Micr

知识大全 中元节的二十个禁忌

中元节,俗称鬼节、施孤、七月半,佛教称为盂兰盆节。与除夕、清明节、重阳节三节是中国传统的祭祖大节,也是流行于汉字文化圈诸国的传统文化节日。中元节有放河灯、焚纸锭的习俗。对于中元节,很多人都不知道它是什

知识大全 我的Visual C++入门之路

我的VisualC++入门之路  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!N次失败次成功还学的不

知识大全 Visual C++中OpenGL编程入门

VisualC++中OpenGL编程入门  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Open

知识大全 Visual C++制作一个Sniffer实例

VisualC++制作一个Sniffer实例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!Snif

知识大全 Visual C++实现各种文字特殊效果

VisualC++实现各种文字特殊效果  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!.NET编程免

知识大全 用Visual C++ 2005编写更快的代码

用VisualC++2005编写更快的代码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  对于C

知识大全 理解 Visual C++ Extensions for ADO

理解VisualC++ExtensionsforADO  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 基于Visual C++的Winsock API研究

基于VisualC++的WinsockAPI研究  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!为了