程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言基礎知識 >> VC開發小技巧(1)

VC開發小技巧(1)

編輯:C語言基礎知識
一、打開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:[email protected]");
  
  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
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved