導航:首頁 > IDC知識 > 獲取idcstatic的句柄

獲取idcstatic的句柄

發布時間:2020-10-27 22:25:15

1、怎麼得到cstatic控制項的句柄

CStatic 繼承於 CWnd,是一種特殊的窗體。他可以顯示文本字元串(這也是最常用的用法)、圖標、指針(cursor)、點陣圖和增強圖文元件. 通常靜態控制項不提供輸入和輸出。但是如果把他的屬性設置為 SS_NOTIFY,他可以通知其父窗口的擊滑鼠事件。
一。CStatic 用於顯示文本
如果文本不變,可以直接設置其 Caption。如果想在運行過程中改變其顯示文本,可以用如下方式:
CStatic *pStatic=(CStatic*)GetDlgItem(IDC_STATIC);
pStatic->SetWindowText("Just a Test of Static Control!");
二。CStatic 用於顯示圖標
如果要顯示圖標,則必須要設置窗口屬性為 SS_ICON 和 SS_CENTERIMAGE,實例代碼如下:
CStatic* pStatic = (CStatic*)GetDlgItem(IDC_STATIC);
LONG style = GetWindowLong(pStatic->GetSafeHwnd(), GWL_STYLE);style |= SS_ICON;
style |= SS_CENTERIMAGE;
SetWindowLong(pStatic->GetSafeHwnd(),GWL_STYLE,style);
pStatic->SetIcon(m_hIcon);
三。CStatic 用於顯示指針 cursor
如果要顯示 cursor,則必須要設置窗口屬性為 SS_ICON 和 SS_CENTERIMAGE,實例代碼如下:
CStatic* pStatic = (CStatic*)GetDlgItem(IDC_STATIC);
LONG style = GetWindowLong(pStatic->GetSafeHwnd(), GWL_STYLE);
style |= SS_ICON;
style |= SS_CENTERIMAGE;
SetWindowLong(pStatic->GetSafeHwnd(),GWL_STYLE,style);
pStatic->SetCursor(OnQueryDragIcon());
四。CStatic 用於顯示點陣圖
如果要顯示圖標,則必須要設置窗口屬性為 SS_BITMAP 和 SS_CENTERIMAGE,實例代碼如下:
//獲得指向靜態控制項的指針
CStatic *pStatic=(CStatic*)GetDlgItem(IDC_STATIC);
//獲得點陣圖句柄
HBITMAP hBitmap=::LoadBitmap(AfxGetApp()->m_hInstance,
MAKEINTRESOURCE(IDB_BITMAP2));
//LONG result = SetWindowLong(pStatic->GetSafeHwnd(),GWL_STYLE,style);
//設置靜態控制項的樣式,使其可以使用點陣圖,並試位標顯示使居中
pStatic->ModifyStyle(0xF,SS_BITMAP|SS_CENTERIMAGE);
//設置靜態控制項顯示點陣圖
pStatic->SetBitmap(hBitmap);

文章出處:CSDN

使用Visual C++ 6.0編制軟體時,靜態控制項是最常用的控制項之一。一般情況下,靜態控制項用作那些沒有固定標題文本屬性的控制項(如文本編輯控制項、列表框等)的標簽,或者用來為控制項分組,或者用來顯示一些提示性的文件。實際上,靜態控制項除了顯示靜態文本這一基本功能外,還有許多其他的特殊功能,如在靜態控制項中可以顯示圖標、點陣圖,甚至還可以在靜態控制項中顯示動畫。本文將通過示常式序來介紹靜態控制項的這些特殊用法。

1. 顯示圖標
⑴ 使用AppWizard創建一個基於對話框的MFC應用程序,設置其工程名為ShowIco。
⑵ 在對話框上增加一個靜態控制項。需要注意的是,有資源管理器添加的靜態控制項在默認情況下其ID均為IDC_STATIC,因此,如果需要在程序中區分和操縱各個不同的靜態控制項,一般情況下,需要更改新添加的靜態控制項的ID值。這里將靜態控制項的ID值設置為IDC_SHOWICO。
⑶ 在資源管理器中添加圖標資源,其ID為IDI_ICON1。
⑷ 使用ClassWizard添加WM_INITDIALOG消息處理函數OnInitDialog。
⑸ 在OnInitDialog函數中下面的代碼:
//獲得指向靜態控制項的指針
CStatic *pStatic=(CStatic *)GetDlgItem(IDC_SHOWICO);
//載入圖標
HICON hIcon=AfxGetApp()->LoadIcon(IDI_ICON1);
//設置靜態控制項的樣式,使其可以使用圖標,並試圖標顯示使居中
pStatic->ModifyStyle(0xF,SS_ICON|SS_CENTERIMAGE);
//設置靜態控制項圖標
pStatic->SetIcon(hIcon);
運行該程序,顯示如上圖。

2.顯示點陣圖
⑴ 使用AppWizard創建一個基於對話框的MFC應用程序,設置其工程名為ShowBmp。
⑵ 在對話框上增加一個靜態控制項,將靜態控制項的ID值設置為IDC_SHOWBMP。
⑶ 在資源管理其中添加點陣圖資源,其ID為IDB_INFO。
⑷ 使用ClassWizard添加WM_INITDIALOG消息處理函數OnInitDialog。
⑸ 在OnInitDialog函數中下面的代碼:
//獲得指向靜態控制項的指針
CStatic *pStatic=(CStatic *)GetDlgItem(IDC_SHOWBMP);
//獲得點陣圖句柄
HBITMAP Bitmap=::LoadBitmap(AfxGetApp()_hInstance,
  MAKINTRESOURCE(IDB_INFO));
//設置靜態控制項的樣式,使其可以使用點陣圖,並試位標顯示使居中
pStatic->ModifyStyle(0xF,SS_BITMAP|SS_CENTERIMAGE);
//設置靜態控制項顯示點陣圖
pStatic->SetBitmap(hBitmap);
運行該程序即可。

3. 顯示動畫
編寫一個字元串在靜態控制項中不停的移動的程序。
⑴ 使用AppWizard創建一個基於對話框的MFC應用程序,設置其工程名為ShowAnimation。
⑵ 在對話框上增加一個靜態控制項。將靜態控制項的ID值設置為IDC_PREVIEW。
⑶ 使用ClassWizard添加WM_INITDIALOG消息處理函數OnInitDialog和WM_TIMER的消息處理函數OnTimer。
⑷ 在CshowAnimationDlg類中,增加兩個變數m_x和m_y,用以表示字元串的坐標。
⑸ 在OnInitDialog函數中添加下列代碼:
m_x=0;
m_y=0;
  KillTimer(1);
VERIFY(SetTimer(1, 500, NULL) != 0);
1. 在CshowAnimationDlg類中,增加一個成員函數Draw()如下:
void CshowAnimationDlg::Draw()
 {
  CWnd *pWnd=GetDlgItem(IDC_PREVIEW);
CDC *pDC=pWnd->GetDC();
RECT rect;
 pWnd->GetClientRect(&rect);
pWnd->Invalidate();
pWnd->UpdateWindow();
 pDC->SelectStockObject(BLACK_BRUSH);
pDC->Rectangle(0,0,rect.right,rect.bottom);
 pDC->SetTextColor(RGB(255,0,0));
pDC->SetBkColor(RGB(0,0,0));
if((m_x>=rect.right)||(m_y>=rect.bottom-20))
{ m_x=0;
m_y=0;
  }
pDC->TextOut(m_x,m_y,\"動畫\");
 }
2. 在OnTimer函數中,添加如下代碼:
if (nIDEvent == 1)
{
m_x+=5;
m_y+=5;
Draw();
 }
 else CWnd::OnTimer(nIDEvent);

與獲取idcstatic的句柄相關的知識