VC編程技巧一

來源:互聯網
上載者:User

一、在vc中,遍曆對話方塊中的所有子控制項

  CRect rect;

  CWnd *pWnd =
GetWindow(GW_CHILD);
  while (pWnd != NULL)

  {

      pWnd->GetWindowRect(&rect);
// 擷取控制項的尺寸
      ...

      pWnd =
pWnd->GetWindow(GW_HWNDNEXT);
  }


二、vc中,多個按鈕控制項共用一個響應函數

  假如有5個按鈕,其ID分別為:IDC_BUTTON1、IDC_BUTTON2、...、IDC_BUTTON5,步驟如下:

1、在標頭檔中,聲明響應函數,如下:

  afx_msg void OnButtonClick(UINT
nID);
2、在cpp檔案的BEGIN_MESSAGE_MAP與END_MESSAGE_MAP之間加入如下代碼:

  ON_COMMAND_RANGE(IDC_BUTTON1,
IDC_BUTTON5, OnButtonClick)
3、響應函數的實現

  void OnButtonClick(UINT
nID)
  {

     switch (nID)

     {

      case IDC_BUTTON1:

          // do something

         break;

      case IDC_BUTTON2:

         // do someting

        break;

        ...

      case IDC_BUTTON5:

        break;

    }

  }


三、多個功能表項目共用同一個OnUpdate函數

  假如有10個功能表項目,其ID分別為ID_MENU1,...,ID_MENU10,則步驟如下:

  1、在標頭檔中聲明響應函數

  afx_msg void
OnUpdateOptions(CCmdUI *pCmdUI)
  2、在cpp檔案中,添加如下代碼:

  ON_UPDATE_COMMAND_UI_RANGE(ID_MENU1,
ID_MENU10, OnUpdateOptions)
  3、響應函數的實現

  void OnUpdateOptions(CCmdUI
*pCmdUI)
  {

     switch
(pCmdUI->m_nID)
     {

        case ID_MENU1:

          
pCmdUI->Enable(FALSE);
           break;

        ...

        case ID_MENU10:

          pCmdUI->Enable(TRUE);

          break;

     }

  }


四、得到當前應用程式的路徑
   char *str =
new char[256];
  
::GetModuleFileName(NULL,str,MAX_PATH);
   //str即為所求
   delete []str;
   str=NULL;

   // 獲得當前程式運行目錄,不包含檔案名稱

   char pFileName[256];

   GetModuleFileName(NULL, pFileName,
255);
   CString
strFullPath(pFileName);
   int nPos = strFullPath.ReverseFind(_T('//'));
// 找最後一個'/'的位置
   strFullPath =
strFullPath.Left(nPos);

  五、當文檔檔案被修改時在標題上給出提示

建立一個SDI應用程式,在Doc類中重載文檔類的虛函數SetModifiedFlag,代碼如下:

  void
CMyDoc::SetModifiedFlag(BOOL bModified)

{

CString strTitle = GetTitle();

CString strDirtyFlag = "
文檔檔案已被修改,注意儲存喔!"; // 注意引號內前面的空格
// 如果不要引號內前面的空格,save as儲存檔案對話方塊中的檔案名稱後會帶*號

if (!IsModified() &&
bModified)
{

  SetTitle(strTitle +
strDirtyFlag);
}

else if (IsModified()
&& !bModified)
{

  int nTitleLength =
strTitle.GetLength();
  int
nDirtyLength = strDirtyFlag.GetLength();
  SetTitle(strTitle.Left(nTitleLength -
nDirtyLength));
}

UpdateFrameCounts();

CDocument::SetModifiedFlag(bModified);

}



六、CFileDialog對話方塊選擇多個檔案的處理
     // 首先建立一個 CFIleDialog 類執行個體,並設定多選標誌
    
CFileDialog mFileDlg(TRUE, NULL,NULL,

                          OFN_ALLOWMULTISELECT,
                          
_T("Text Files (*.txt)|*.txt|All Files (*.*)|*.*||"),

                          AfxGetMainWnd());
     CString pathName;

     If(mFileDlg.DoModal ()==IDOK)
     {
         POSITION
mPos=mFileDlg.GetStartPosition();
         while(mPos!=NULL)
         {

              pathName=mFileDlg.GetNextPathName(mPos);

              TRACE("%s/n",pathName);
}
     }
    
else
         TRACE(“IDCANCLE/n”);

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.