熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

介紹Visual C++中的二十個常用方法

2013-11-13 10:07:33  來源: .NET編程 

  打開CDROM
mciSendString(Set cdAudio door open waitNULLNULL); 

  關閉CD_ROM

   mciSendString(Set cdAudio door closed waitNULLNULL);  

  關閉計算機

   OSVERSIONINFO OsVersionInfo; //包含操作系統版本信息的數據結構
OsVersionInfodwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&OsVersionInfo); //獲取操作系統版本信息
if(OsVersionInfodwPlatformId == VER_PLATFORM_WIN_WINDOWS)
{
//Windows調用ExitWindowsEx()函數重新啟動計算機

DWORD dwReserved;
ExitWindowsEx(EWX_REBOOTdwReserved); //可以改變第一個參數實現注銷用戶
//關機關閉電源等操作
// 退出前的一些處理程序
}  

  重啟計算機

   typedef int (CALLBACK *SHUTDOWNDLG)(int); //顯示關機對話框函數的指針
HINSTANCE hInst = LoadLibrary(shelldll); //裝入shelldll
SHUTDOWNDLG ShutDownDialog; //指向shelldll庫中顯示關機對話框函數的指針
if(hInst != NULL)
{
//獲得函數的地址並調用之
ShutDownDialog = (SHUTDOWNDLG)GetProcAddress(hInst(LPSTR));

(*ShutDownDialog)();

  枚舉所有字體

   LOGFONT lf;
lflfCharSet = DEFAULT_CHARSET; // Initialize the LOGFONT structure
strcpy(lflfFaceName);
CClientDC dc (this);
// Enumerate the font families
::EnumFontFamiliesEx((HDC) dc&lf                                                                                      
(FONTENUMPROC) EnumFontFamProc(LPARAM) this);
//枚舉函數
int CALLBACK EnumFontFamProc(LPENUMLOGFONT lpelf
LPNEWTEXTMETRIC lpntmDWORD nFontTypelong lparam)

{
// Create a pointer to the dialog window
CDayDlg* pWnd = (CDayDlg*) lparam;
// add the font name to the list box
pWnd >m_ctlFontListAddString(lpelf >elfLogFontlfFaceName);
// 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;
menuLoadMenu(IDR_MAINFRAME); ////顯示菜單 也可改變菜單項
pWnd>SetMenu(&menu);
pWnd>DrawMenuBar();
b_m=true;
menuDetach();

  獲取可執行文件的圖標

  

  HICON hIcon=::ExtractIcon(AfxGetInstanceHandle()_T(NotePadexe));
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_GETWORKAREA sizeof(RECT) &rWorkArea );
CRect rcWA;
if(!bResult)
{//如果調用不成功就利用GetSystemMetrics獲取屏幕面積
rcWA=CRect(iSXiSY);
}
else
rcWA=rWorkArea;
int iX=lpRect>left;
int iY=lpRect>top;

if(iX < rcWAleft + DETASTEP && iX!=rcWAleft)
{//調整左
//pWnd>SetWindowPos(NULLrcWAleftiYSWP_NOSIZE);
lpRect>OffsetRect(rcWAleftiX);
AdjustPos(lpRect);
return TRUE;
}
if(iY < rcWAtop + DETASTEP && iY!=rcWAtop)
{//調整上
//pWnd>SetWindowPos(NULL iXrcWAtopSWP_NOSIZE);
lpRect>OffsetRect(rcWAtopiY);
AdjustPos(lpRect);
return TRUE;
}
if(iX + lpRect>Width() > rcWAright DETASTEP && iX !=rcWArightlpRect>Width())
{//調整右
//pWnd>SetWindowPos(NULL rcWArightrcWWidth()iYSWP_NOSIZE);
lpRect>OffsetRect(rcWArightlpRect>right);
AdjustPos(lpRect);
return TRUE;
}
if(iY + lpRect>Height() > rcWAbottom DETASTEP && iY !=rcWAbottomlpRect>Height())
{//調整下
//pWnd>SetWindowPos(NULL iXrcWAbottomrcWHeight()SWP_NOSIZE);
lpRect>OffsetRect(rcWAbottomlpRect>bottom);
return TRUE;
}
return FALSE;
}
//然後在ONMOVEING事件中使用所下過程調用

CRect r=*pRect;
AdjustPos(&r);
*pRect=(RECT)r;  

  十二給系統菜單添加一個菜單項

給系統菜單添加一個菜單項需要進行下述三個步驟
 
    首先使用Resource Symbols對話(在View菜單中選擇Resource Symbols...可以顯示該對話)定義菜單項ID該ID應大於xF而小於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(szMailAddressmailto:);
ShellExecute(NULL open szMailAddress NULL NULL SW_SHOWNORMAL);

//運行可執行程序
WinExec(notepadexeSW_SHOW); //運行計事本 

  十四動態增加或刪除菜單

   增加菜單


   //添加
CMenu *mainmenu;
mainmenu=AfxGetMainWnd()>GetMenu(); //得到主菜單
(mainmenu>GetSubMenu ())>AppendMenu (MF_SEPARATOR);//添加分隔符
(mainmenu>GetSubMenu ())>AppendMenu(MF_STRINGID_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(istrMF_BYPOSITION);
//將指定菜單項的標簽拷貝到指定的緩沖區MF_BYPOSITION的解釋見上
if(str==Always on &Top) //如果是剛才我們增加的菜單項則刪除
{
(mainmenu>GetSubMenu ())>DeleteMenu(iMF_BYPOSITION);
break;

  十五改變應用程序的圖標

  靜態更改 修改圖標資源IDR_MAINFRAME它有兩個圖標一個是*另一個是*注意要一起修改
動態更改 向主窗口發送WM_SETICON消息代碼如下

   HICON hIcon=AfxGetApp()>LoadIcon(IDI_ICON);
ASSERT(hIcon);
AfxGetMainWnd()>SendMessage(WM_SETICONTRUE(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()NULLNULLwhatever);
//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_ENHMETAFILEhMF);                                                                                
CloseClipboard();
//DeleteMetaFile(hMF);
delete m_pMetaDC;   

  十八剪切板上文本數據的傳送

  把文本放置到剪接板上

   CString source;
//put your text in source
if(OpenClipboard())
{
HGLOBAL clipbuffer;
char * buffer;
EmptyClipboard();
clipbuffer = GlobalAlloc(GMEM_DDESHARE sourceGetLength()+);
buffer = (char*)GlobalLock(clipbuffer);
strcpy(buffer LPCSTR(source));
GlobalUnlock(clipbuffer);
SetClipboardData(CF_TEXTclipbuffer);
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控件中

   //在Staic控件內顯示位圖
void CShowBmpInDlgDlg::ShowBmpInStaic()
{
CBitmap hbmp;
HBITMAP hbitmap;
//將pStatic指向要顯示的地方
CStatic *pStaic;
pStaic=(CStatic*)GetDlgItem(IDC_IMAGE);
//裝載資源 MMbmp是我的一個文件名用你的替換
hbitmap=(HBITMAP)::LoadImage (::AfxGetInstanceHandle()MMbmp
IMAGE_BITMAPLR_LOADFROMFILE|LR_CREATEDIBSECTION);

hbmpAttach(hbitmap);
//獲取圖片格式
BITMAP bm;
hbmpGetBitmap(&bm);
CDC dcMem;
dcMemCreateCompatibleDC(GetDC());
CBitmap *poldBitmap=(CBitmap*)dcMemSelectObject(hbmp);
CRect lRect;
pStaic>GetClientRect(&lRect);
//顯示位圖
pStaic>GetDC()>StretchBlt(lRectleft lRecttop lRectWidth()lRectHeight()
&dcMem bmbmWidthbmbmHeightSRCCOPY);
dcMemSelectObject(&poldBitmap);


From:http://tw.wingwit.com/Article/program/net/201311/12627.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.