標籤:style io color ar os sp for 檔案 div
1、在對話方塊的:OnInitDialog()函數中添加以下紅色代碼:
BOOL CGSM_MessageDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 設定此對話方塊的表徵圖。當應用程式主視窗不是對話方塊時,架構將自動
// 執行此操作
SetIcon(m_hIcon, TRUE); // 設定大表徵圖
SetIcon(m_hIcon, FALSE); // 設定小表徵圖
// TODO: 在此添加額外的初始化代碼
//建立映像列表
m_ImageList.Create(32,32,ILC_COLOR24|ILC_MASK,1,1);
//向映像列表中添加表徵圖
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONBOOK));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONNOTE));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONSEND));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONRECV));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONSET));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONUSER));
UINT array[8];
for(int i=0;i<8;i++)
{
if(i==2 || i==5)
array[i] = ID_SEPARATOR; //第、個按鈕為分隔條
else
array[i] = i+1001; //為工具列按鈕設定索引
}
m_ToolBar.Create(this);
m_ToolBar.SetButtons(array,8);
//關聯映像列表
m_ToolBar.GetToolBarCtrl().SetImageList(&m_ImageList);
m_ToolBar.SetSizes(CSize(50,60),CSize(32,32)); //設定按鈕和表徵圖的大小
m_ToolBar.SetButtonText(0,L"電話簿管理");
m_ToolBar.SetButtonText(1,L"常用語管理");
m_ToolBar.SetButtonText(3,L"簡訊息發送");
m_ToolBar.SetButtonText(4,L"簡訊息接收");
m_ToolBar.SetButtonText(6,L"簡訊貓設定");
m_ToolBar.SetButtonText(7,L"操作員管理");
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);
return TRUE; // 除非將焦點設定到控制項,否則返回TRUE
}
2、從代碼中的“array[i] = i+1001; //為工具列按鈕設定索引”可以看出,工具列表徵圖的地址是1001開始的。因此,工具列的表徵圖分別為1001 1002 1003 1004等等。
3、現在為表徵圖工具列添加響應函數:
在對話方塊標頭檔的.h中添加紅色代碼:如下
// 實現
protected:
HICON m_hIcon;
// 產生的訊息映射函數
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnPhoneBook();
4、在對話方塊的Dlg.cpp中添加如下代碼:
BEGIN_MESSAGE_MAP(CGSM_MessageDlg, CDialog)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_COMMAND(1001,OnPhoneBook)//1001時候第一個按鈕的ID值,如果要為第二個表徵圖按鈕添加函數這改為:ON_COMMAND(1002,OnPhoneBook)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
5、在對話方塊的Dlg.cpp中添加響應函數:
void CGSM_MessageDlg::OnPhoneBook()
{
CPhoneBookDlg dlg;
dlg.DoModal();//用於連結一個對話方塊
}
void CFilterDlg::OnSize(UINT nType, int cx, int cy){ CDialog::OnSize(nType, cx, cy); if (m_list.m_hWnd) { CRect rect(0, 32, cx, cy); //GetWindowRect(&rect); //擷取視窗rect //ScreenToClient(&rect); //從視窗尺寸轉換到使用者區rect //rect.InflateRect(-10, 0, -10, -10); m_list.MoveWindow(&rect); }}
vs2008 對話方塊上的工具列添加提示資訊
對話方塊上的工具條上的提示資訊不能採用mfc應用程式直接在資源中添加的方式添加,因為對話方塊不由CFrameWnd管理。
1. 在對話方塊類標頭檔.h中添加
BOOL OnToolTipNotify( UINT id,NMHDR* pNMHDR,LRESULT* pResult);
2. 在對話方塊.cpp檔案中添加
(1)訊息映射中添加:
BEGIN_MESSAGE_MAP(CAssessMainDialog, CBCGPDialog)
//控制項響應,範圍為0到無窮大
ON_NOTIFY_EX( TTN_NEEDTEXT,0,OnToolTipNotify)
//控制項響應,範圍為0到OxFFFF
//ON_NOTIFY_EX_RANGE( TIN_NEEDTEXT,0,OxFFFF,OnToolTipNotify)
END_MESSAGE_MAP()
(2)添加響應函數:
BOOL CAssessMainDialog::OnToolTipNotify( UINT id,NMHDR* pNMHDR,LRESULT* pResult )
{
BOOL bResult = TRUE;
TOOLTIPTEXT *pTTT = (TOOLTIPTEXT*)pNMHDR;
UINT_PTR uID = pNMHDR->idFrom;
if ( pTTT->uFlags && TTF_IDISHWND)
{
//int nID = ::GetDlgCtrlID(HWND(uID);)網上例子說uID為控制項在視窗中的控制代碼,測試結果其實就是控制項的ID,因此這句不需要,
//也可能是編譯器的原因。。。。。。
CString strToolTips(_TEXT(""));
switch ( uID )
{
case ID_EXECUTE:
strToolTips.Format(_TEXT("%s"),_TEXT("執行評估流程"));
break;
case ID_SAVEFILE:
strToolTips.Format(_TEXT("%s"),_TEXT("儲存評估流程"));
break;
case ID_OPENFILE:
strToolTips.Format(_TEXT("%s"),_TEXT("開啟評估流程"));
break;
default:
bResult = FALSE;
}
if ( TRUE == bResult)
{
*pResult = 0;
_tcscpy( pTTT->lpszText,strToolTips);
pTTT->hinst = NULL;
}
}
return bResult;
}
(3)啟用工具提示
在初始化函數中添加,不一定在OnInitDialog函數中。
BOOL CAssessMainDialog::OnInitDialog()
{
CBCGPDialog::OnInitDialog();
CBCGPDialog::EnableVisualManagerStyle();
m_ToolBar->EnableToolTips(TRUE);
//網上的例子是直接啟用對話方塊工具提示,測試結果只能對整個工具列顯示提示資訊,改為啟用工具列提示資訊,ok了
//EnableToolTips(TRUE);
return TRUE;
}
二、狀態列 標頭檔:CStatusBar m_StatBar; void CreateStatusBar(); 源檔案: void CFilterDlg::CreateStatusBar(){ //建立狀態列 if(m_StatBar.Create(this)) { // 狀態行指標對應 ID static UINT indicators[] = { ID_SEPARATOR, ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, }; // 設定狀態列指標 ID 和指標個數 m_StatBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT)); // 設定狀態列指標文本 m_StatBar.SetPaneText(0,L"指標1",0); m_StatBar.SetPaneText(1,L"指標2",0); m_StatBar.SetPaneText(2,L"指標3",0); m_StatBar.SetPaneText(3,L"指標4",0); // 設定狀態列指標屬性 m_StatBar.SetPaneInfo(0,ID_SEPARATOR,SBPS_NORMAL ,100); m_StatBar.SetPaneInfo(1,ID_INDICATOR_CAPS,SBPS_NORMAL ,100); m_StatBar.SetPaneInfo(2,ID_INDICATOR_NUM,SBPS_NORMAL ,100); m_StatBar.SetPaneInfo(3,ID_INDICATOR_SCRL,SBPS_NORMAL ,100); ////為狀態列指標添加表徵圖 //HICON icon[2]; //icon[0] = AfxGetApp()->LoadIcon (IDI_ICON1); //icon[1] = AfxGetApp()->LoadIcon (IDI_ICON2); //m_StatBar.GetStatusBarCtrl().SetIcon(0,icon[0]); //m_StatBar.GetStatusBarCtrl().SetIcon(1,icon[1]); //m_StatBar.GetStatusBarCtrl().SetIcon(2,icon[0]); //m_StatBar.GetStatusBarCtrl().SetIcon(3,icon[1]); //設定狀態列高度 m_StatBar.GetStatusBarCtrl().SetMinHeight(20); // 顯示狀態列 RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0); }} void CFilterDlg::OnSize(UINT nType, int cx, int cy){ CDialog::OnSize(nType, cx, cy); if (m_list.m_hWnd) { // 顯示更新狀態列 RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0); CRect rect(0, 40, cx, cy - 20); //GetWindowRect(&rect); //擷取視窗rect //ScreenToClient(&rect); //從視窗尺寸轉換到使用者區rect //rect.InflateRect(-10, 0, -10, -10); m_list.MoveWindow(&rect); //清單控制項位置 }}
VS2008給表徵圖工具列-狀態列添加響應函數