滾動條控件
主要内容見導圖
編寫程式首先了解應當事先什麼功能
比如滾動條控件,我們編寫滾動條控件的程式實作的功能就是依據滾動條對編輯框内的内容進行更改
對于一個滾動條我們首先要确定它的範圍,然後要确定它的初始化位置,為了使得編輯框獲得位置資訊,則應該調用相關函數對位置消息進行相關擷取
滾動條控件為視窗操作的常用工具,形式上分為視窗滾動條和子視窗滾動條控件,視窗滾動條由系統進行建立,位置和尺寸固定;子視窗滾動條由應用程式建立,位置和尺寸由程式員決定
下面為準備實作的滾動條控件,實作功能直接看按鈕就可以
對于滾動條方面應當實作滾動條與編輯框的相關通信以及初始化
第一步就是初始化,初始化需要的内容就是首先設定編輯框的範圍,然後設定編輯框的預設位置
上面兩個分别由SetScrollRange和SetScrollPos達到。還有一個就是實作初始化顯示,這些都是在一開始就要出現的,無關于其他消息響應
是以在OnInitDialog()中寫上初始化函數如下面,需要實作顯示的函數為ChangeDisplayInfo(m_scrollbar.GetScrollPos());
BOOL C滾動條控件testDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 設定此對話框的圖示。 當應用程式主視窗不是對話框時,架構将自動
// 執行此操作
SetIcon(m_hIcon, TRUE); // 設定大圖示
SetIcon(m_hIcon, FALSE); // 設定小圖示
// TODO: 在此添加額外的初始化代碼
m_ScrollBar.SetScrollRange(0, 20);
m_ScrollBar.SetScrollPos(10);
ChangeDisplayInfo(m_ScrollBar.GetScrollPos());
return TRUE; // 除非将焦點設定到控件,否則傳回 TRUE
}
然後我們想想怎麼去編寫顯示函數,GetScrollPos傳回int型參數,是以形參為int 在下面注意在該函數當中_itow有不安全因素,暫且使用_CRT_SECURE_NO_WARNINGS将報錯去除
通過類向導添加函數如下
void C滾動條控件testDlg::ChangeDisplayInfo(int pos)
{
TCHAR sPos[10];
_itow(pos, sPos, 10);//将數值pos按照十進制的形式轉化到字元串sPos當中
m_dispinfo.SetSel(0, -1);
m_dispinfo.ReplaceSel(sPos);
UpdateData(FALSE);//将與空間綁定的内容顯示到螢幕上
}
接下來響應關于滾動條的消息:VScroll
每次點選箭頭或者中間線消息分别設定不同位置與編輯框響應,注意不同的響應函數與響應消息
void C滾動條控件testDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: 在此添加消息處理程式代碼和/或調用預設值
int iNowPos;
switch (nSBCode)
{
if (pScrollBar == &m_ScrollBar)
{
case SB_THUMBTRACK://拖動滾動滑塊時
m_ScrollBar.SetScrollPos(nPos);
ChangeDisplayInfo(m_ScrollBar.GetScrollPos());
case SB_LINEDOWN://單擊滾動條向下的箭頭
iNowPos = m_ScrollBar.GetScrollPos();
iNowPos = iNowPos + 1;
if (iNowPos>20)
iNowPos = 20;
m_ScrollBar.SetScrollPos(iNowPos);
ChangeDisplayInfo(m_ScrollBar.GetScrollPos());
break;
case SB_LINEUP: //單擊滾動條向上的箭頭
iNowPos = m_ScrollBar.GetScrollPos();
iNowPos = iNowPos - 1;
if (iNowPos<0)
iNowPos = 0;
m_ScrollBar.SetScrollPos(iNowPos);
ChangeDisplayInfo(m_ScrollBar.GetScrollPos());
break;
case SB_PAGEDOWN://單擊滾動條下面的箭頭與滾動塊之間區域
iNowPos = m_ScrollBar.GetScrollPos();
iNowPos = iNowPos + 3;
if (iNowPos>20)
iNowPos = 20;
m_ScrollBar.SetScrollPos(iNowPos);
ChangeDisplayInfo(m_ScrollBar.GetScrollPos());
break;
case SB_PAGEUP://單擊滾動條上面的箭頭與滾動塊之間的區域
iNowPos = m_ScrollBar.GetScrollPos();
iNowPos = iNowPos - 3;
if (iNowPos<0)
iNowPos = 0;
m_ScrollBar.SetScrollPos(iNowPos);
ChangeDisplayInfo(m_ScrollBar.GetScrollPos());
break;
}
}
CDialogEx::OnVScroll(nSBCode, nPos, pScrollBar);
}
後續依據功能寫下列代碼
void C滾動條控件testDlg::OnBnClickedExitButton()
{
// TODO: 在此添加控件通知處理程式代碼
OnOK();
}
void C滾動條控件testDlg::OnBnClickedResetButton()
{
// TODO: 在此添加控件通知處理程式代碼
m_ScrollBar.SetScrollPos(10);
ChangeDisplayInfo(m_ScrollBar.GetScrollPos());
}
void C滾動條控件testDlg::OnBnClickedBottomButton()
{
// TODO: 在此添加控件通知處理程式代碼
m_ScrollBar.SetScrollPos(20);
ChangeDisplayInfo(m_ScrollBar.GetScrollPos());
}
void C滾動條控件testDlg::OnBnClickedTopButton()
{
// TODO: 在此添加控件通知處理程式代碼
m_ScrollBar.SetScrollPos(0);
ChangeDisplayInfo(m_ScrollBar.GetScrollPos());
}
靜态控件
靜态空間是一種包含正文或者圖形的小視窗,應用程式通常使用靜态控件标記其他控制視窗或者分割不同組别的控件
一般情況下靜态控件不接受使用者消息也不發出消息,然而應用程式可以設定靜态控件的樣式進而使得使用者能夠響應輸入
靜态文本像超連結一樣響應使用者的輸入,則應該加入SS_NOTIFY樣式進而允許靜态控件向父視窗發送WM_COMMAND消息
初始化函數中代碼編寫
BOOL C靜态控件Dlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 設定此對話框的圖示。 當應用程式主視窗不是對話框時,架構将自動
// 執行此操作
SetIcon(m_hIcon, TRUE); // 設定大圖示
SetIcon(m_hIcon, FALSE); // 設定小圖示
// TODO: 在此添加額外的初始化代碼
m_bmp.ModifyStyle(0, SS_BITMAP);
HBITMAP hBmp = LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP1));
m_bmp.SetBitmap(hBmp);
return TRUE; // 除非将焦點設定到控件,否則傳回 TRUE
}
響應BN_CLICKED代碼編寫
void C靜态控件Dlg::OnStnClickedStaticBmp()
{
// TODO: 在此添加控件通知處理程式代碼
BITMAP bmp;
GetObject(m_bmp.GetBitmap(), sizeof(BITMAP), &bmp);
CString msg;
msg.Format(L"Image Size%d*%d", bmp.bmWidth, bmp.bmHeight);
AfxMessageBox(msg);
}
清單框控件
初始化代碼如下
BOOL C靜态控件Dlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 設定此對話框的圖示。 當應用程式主視窗不是對話框時,架構将自動
// 執行此操作
SetIcon(m_hIcon, TRUE); // 設定大圖示
SetIcon(m_hIcon, FALSE); // 設定小圖示
// TODO: 在此添加額外的初始化代碼
DWORD cchCurDir = MAX_PATH;
//MAX_PATH是C語言運作時庫中通過#define指令定義的一個宏常量,它定義了編譯器所支援的最長全路徑名的長度
LPTSTR lpszCurDir;//表示指向字元/字元串的指針
TCHAR tchBuffer[MAX_PATH];
lpszCurDir = tchBuffer;
GetCurrentDirectory(cchCurDir, lpszCurDir);
//DWORDGetCurrentDirectory(DWORDnBufferLength,//sizeofdirectorybuffer
//LPTSTRlpBuffer//directorybuffer
// );
DlgDirList(lpszCurDir, IDC_LIST_DIR, IDC_STATIC_DIR, 0);
return TRUE; // 除非将焦點設定到控件,否則傳回 TRUE
}
删除條目代碼如下
void C靜态控件Dlg::OnLbnDblclkListDir()
{
// TODO: 在此添加控件通知處理程式代碼
int i = m_list.GetCurSel();//擷取光标的位置
CString str;
m_list.GetText(i, str);//定位才能擷取檔案名
m_list.DeleteString(i);
CString msg = L"Item" + str + L"deleted!";
AfxMessageBox(msg);
}