VC開發小技巧

來源:互聯網
上載者:User

  一、開啟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衍生類別的函數中。

  CMeta

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.