程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 編寫多文檔應用程序

編寫多文檔應用程序

編輯:關於VC++

一、動態菜單與工具欄

(未登錄狀態)

(登陸狀態)

實現原理:

1.菜單

BOOL SetMenu(
 HWND hWnd, // handle to window
 HMENU hMenu // handle to menu
);

可以改變菜單。

2.工具欄

BOOL CToolBarCtrl::SetState( int nID, UINT nState );

可以改變工具欄按鈕狀態。

還要調用CFrameWnd::RecalcLayout()函數計算工具欄尺寸。

二、自制對話條

//創建對話條
if(!m_wndBar.Create(this,IDD_DIALOGBAR,WS_CHILD|WS_VISIBLE|
    CBRS_BOTTOM|CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY |
    CBRS_SIZE_DYNAMIC,IDD_DIALOGBAR))
//操縱對話條上的CTabCtrl控件
CTabCtrl * ptab=(CTabCtrl *)m_wndBar.GetDlgItem(IDC_TAB_INFO);
ptab->InsertItem(0,"操作信息");
ptab->SetImageList(&((CMainFrame *)AfxGetMainWnd())->m_imageList);
……………
//隱藏和顯示CListBox控件
CListBox * plistInfo = (CListBox*)m_wndBar.GetDlgItem(IDC_LIST_INFO);
plistInfo->SetWindowPos(NULL,
    0,
    0,
    GetSystemMetrics(SM_CXSCREEN)-11,
    75,
    SWP_NOMOVE|SWP_NOZORDER | SWP_NOACTIVATE|SWP_SHOWWINDOW);

三、位圖按鈕與菜單

由於按鈕和菜單比較少,沒有采用自繪技術,而是采用了

CButton::SetBitmap()和CMenu::SetMenuItemBitmaps()函數,相信讀者比作者更清楚這兩個函數的用法。

四、只能運行程序的一個實例

當程序已經運行時,如果再次運行,則激活前一個實例。

實現原理:

1. 只運行一個實例

#define UNIQE_NAME "{1AB792D6-EEF2-4528-9A84-91356811E7A4}"

BOOL CRaclientApp::InitInstance()函數中加入

m_hOneInstance = ::CreateMutex( NULL,FALSE,UNIQE_NAME);
if ( GetLastError() == ERROR_ALREADY_EXISTS )//如果存在前一個
{
//發送消息,激活實例
  DWORD dwRecipients = BSM_APPLICATIONS;
  ::BroadcastSystemMessage( BSF_NOHANG,&dwRecipients,
    ID_RA_MSG, // registered window message
    0,0 ); // user defined parameters
  return FALSE;
}

還要在CRaclientApp::ExitInstance()中

CloseHandle(m_hOneInstance);

2、激活前一個實例

#define ra_MSG "{D48CA923-4925-41cb-8F56-ABAAAFCEF787}"
const UINT ID_RA_MSG =::RegisterWindowMessage(ra_MSG);//注冊消息

然後再CmainFrame中添加相應的消息處理函數。

五、自定義視圖類

沒有用向導生成的類,因此三個子窗口各自不同,比較簡單,不介紹了。

詳細代碼請參看源程序。還有一個數據庫版本的,沒有更高的價值,因此沒拿出來現丑。

錯誤和不足請看客們指出,共同研究。

Email:[email protected](ra_MSG);//注冊消息

然後再CmainFrame中添加相應的消息處理函數。

五、自定義視圖類

沒有用向導生成的類,因此三個子窗口各自不同,比較簡單,不介紹了。

詳細代碼請參看源程序。還有一個數據庫版本的,沒有更高的價值,因此沒拿出來現丑。

錯誤和不足請看客們指出,共同研究。

Email:[email protected].

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved