一、打開CD-ROM

mciSendString("Set cdAudio door open wait",Null,0,Null);

 

二、關閉CD_ROM

 

mciSendString("Set cdAudio door closed wait",Null,0,Null);

 

三、關閉電腦

 

OSVERSIONINFO OsVersionInfo; //包含作業系統版本資訊的資料結構
OsVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&OsVersionInfo); //獲取作業系統版本資訊
if(OsVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
{
//Windows98,調用ExitWindowsEx()函數重新開機電腦
DWORD dwReserved;
ExitWindowsEx(EWX_REBOOT,dwReserved); //可以改變第一個參數,實現登出使用者、
//關機、關閉電源等操作
// 退出前的一些處理常式
}

 

四、重啟電腦

 

typedef int (CALLBACK *SHUTDOWNDLG)(int); //顯示關機對話方塊函數的指標
HINSTANCE hInst = LoadLibrary("shell32.dll"); //裝入shell32.dll
SHUTDOWNDLG ShutDownDialog; //指向shell32.dll庫中顯示關機對話方塊函數的指標
if(hInst != Null)
{
//獲得函數的位址並調用之
ShutDownDialog = (SHUTDOWNDLG)GetProcAddress(hInst,(LPSTR)60);

 

(*ShutDownDialog)(0);
}

 

五、枚舉所有字體

 

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,0);
//枚舉函數
int CALLBACK EnumFontFamProc(LPENUMLOGFONT lpelf,
LPNEWTEXTMETRIC lpntm,DWORD nFontType,long lparam)

 

{
// Create a pointer to the dialog window
CDay7Dlg* pWnd = (CDay7Dlg*) lparam;
// add the font name to the list box
pWnd ->m_ctlFontList.AddString(lpelf ->elfLogFont.lfFaceName);
// Return 1 to continue font enumeration
return 1;
}

 

  其中m_ctlFontList是一個清單控制項變數



六、一次只運行一個程式實例,如果已運行則退出

 

if( FindWindow(Null,"程式標題")) exit(0);

 

 
七、得到當前滑鼠所在位置

 

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"),0);
if (hIcon &&hIcon!=(HICON)-1)
{
pDC->DrawIcon(10,10,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), &rWorkAre
a, 0);
CRect rcWA;
if(!bResult)
{//如果調用不成功就利用GetSystemMetrics獲取螢幕面積
rcWA=CRect(0,0,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,0,0,SWP_NOSIZE);
lpRect->OffsetRect(rcWA.left-iX,0);
AdjustPos(lpRect);
return TRUE;
}
if(iY < rcWA.top + DETASTEP && iY!=rcWA.top)
{//調整上
//pWnd->SetWindowPos(Null ,iX,rcWA.top,0,0,SWP_NOSIZE);
lpRect->OffsetRect(0,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,0,0,SWP_NOSIZE);
lpRect->OffsetRect(rcWA.right-lpRect->right,0);
AdjustPos(lpRect);
return TRUE;
}
if(iY + lpRect->Height() > rcWA.bottom - DETASTEP && iY !=rcWA.bottom-lpRect
->Height())
{//調整下
//pWnd->SetWindowPos(Null ,iX,rcWA.bottom-rcW.Height(),0,0,SWP_NOSIZE);
lpRect->OffsetRect(0,rcWA.bottom-lpRect->bottom);
return TRUE;
}
return FALSE;
}
  
  然後在ONMOVEING事件中使用所下程序呼叫

 

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



十二、給系統功能表添加一個功能表項目

 

  給系統功能表添加一個功能表項目需要進行下述三個步驟:

 

  首先,使用Resource Symbols對話(在View功能表中選擇Resource Symbols...可以顯示該對話)定義功能表項目ID,該ID應大於0x0F而小於0xF000;

 

  其次,調用CWnd::GetSystemMenu獲取系統功能表的指標並調用CWnd:: Appendmenu將功能表項目添加到功能表中。下例給系統功能表添加兩個新的

 

int CMainFrame:: OnCreate (LPCREATESTRUCT lpCreateStruct)
{
//…
//Make sure system menu item is in the right range.
ASSERT(IDM_MYSYSITEM<0xF000);
//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);
//…
}



十三、運行其它程式

 

  1、運行EMAIL或網址

 

char szMailAddress[80];
strcpy(szMailAddress,"mailto:netvc@21cn.com");
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( ),然後,再以如下形式調用SetWindowText()函數:

SetWindowText( *m_pCWnd,(LPCTSTR)m_WindowText);// m_WindowText可以是一個CString類的變數。


十七、剪切板上通過增強原始檔案拷貝圖像資料

  下面代碼拷貝通過原始檔案拷貝圖像資料到任何應用程式,其可以放置在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;
// 螢幕和記憶體設備描述表
HBITMAP hBitmap, hOldBitmap;
// 點陣圖控制碼
int nX, nY, nX2, nY2;
// 選定區域座標
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;
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)
nY2 = yScrn;
nWidth = nX2 - nX;
nHeight = nY2 - nY;
// 創建一個與螢幕設備描述表相容的點陣圖
hBitmap = CreateCompatibleBitmap
(hScrDC, nWidth, nHeight);
// 把新點陣圖選到記憶體設備描述表中
hOldBitmap =(HBITMAP)SelectObject(hMemDC, hBitmap);
// 把螢幕設備描述表拷貝到記憶體設備描述表中
BitBlt(hMemDC, 0, 0, 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);
//裝載資源 MM.bmp是我的一個檔案名,用你的替換
hbitmap=(HBITMAP)::LoadImage (::AfxGetInstanceHandle(),"MM.bmp",
IMAGE_BITMAP,0,0,LR_LOADFROMFILE
arrow
arrow
    全站熱搜

    戮克 發表在 痞客邦 留言(0) 人氣()