国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
孫鑫VC視頻教程筆記之第九課“程序外觀修改及工具欄狀態(tài)欄編程”
1.      在窗口創(chuàng)建之前修改窗口外觀:

The framework calls PreCreateWindow just prior to creating the window. By modifying the CREATESTRUCT parameter to PreCreateWindow, your application can change the attributes used to create the window.

 

修改窗口的標(biāo)題:通過修改CREATESTRUCT結(jié)構(gòu)體中的lpszName,但是注意,FWS_ADDTOTITLE is an MFC-specific style that instructs the framework to add the document title to the window’s caption,所以必須將FWS_ADDTOTITLE從現(xiàn)有的style中去除FWS_ADDTOTITLE,即使cs.style & ~FWS_ADDTOTITLE

 

對(duì)于窗口的類型和大小,是在創(chuàng)建窗口的時(shí)候設(shè)定的,而窗口的圖標(biāo),光標(biāo),背景是在設(shè)計(jì)窗口設(shè)計(jì)類的時(shí)候的設(shè)定的,是由MFC底層代碼設(shè)計(jì),但可以自己創(chuàng)建窗口類,然后讓系統(tǒng)按照自己定義的窗口類執(zhí)行。將以下代碼放在CMainFrame類的PreCreateWindow函數(shù)中添加:

WNDCLASS wndcls;

      wndcls.cbClsExtra=0;

      wndcls.cbWndExtra=0;

wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH); //設(shè)置窗口背景為黑色

      wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);

      wndcls.hIcon=LoadIcon(NULL,IDI_WARNING);

      wndcls.hInstance=AfxGetInstanceHandle();

      //因?yàn)?/span>MFC本身也有DefWindowProc函數(shù),但參數(shù)不一致,所以還是調(diào)用win32的函數(shù)

wndcls.lpfnWndProc=::DefWindowProc; //不想修改系統(tǒng)操作,所以調(diào)用系統(tǒng)默認(rèn)的回調(diào)函數(shù)

      wndcls.lpszClassName="style test";

      wndcls.lpszMenuName=NULL;

      wndcls.style=CS_HREDRAW | CS_VREDRAW;

     

      RegisterClass(&wndcls);

cs.lpszClass="style test"//按照自己的設(shè)計(jì)創(chuàng)建

 

運(yùn)行以上代碼后發(fā)現(xiàn)窗口圖標(biāo)改變了,但光標(biāo)和背景沒有改變,這是因?yàn)樯鲜龃a修改是框架類,光標(biāo)和背景屬于View類,所以還要在View類中PreCreateWindow修改。在實(shí)現(xiàn)上述代碼后,在CViewPreCreateWindow函數(shù)中添加如下代碼就可以實(shí)現(xiàn)修改光標(biāo)和背景顏色的目的:

cs.lpszClass="style test"; //修改光標(biāo)和背景

也可以通過以下方式實(shí)現(xiàn):

cs.lpszClass=AfxRegisterWndClass(NULL,LoadCursor(NULL,IDC_CROSS),(HBRUSH)GetStockObject(BLACK_BRUSH),0);

 

注:所以在CMainFrame類中只能修改的是Icon

隨意如果采用這種代碼實(shí)現(xiàn),編寫的代碼較多,會(huì)比較麻煩,有一種替代的方法:

cs.lpszClass=AfxRegisterWndClass(NULL,0,0,LoadIcon(NULL,IDI_WARNING));

 

2.      在窗口創(chuàng)建之后修改窗口的外觀:

窗口創(chuàng)建之后修改窗口外觀一般在CMainFrame類的OnCreate函數(shù)中

SetWindowLong(m_hWnd,GWL_STYLE,WS_OVERLAPPEDWINDOW); //文檔的標(biāo)題也去掉了

 

下面一種實(shí)現(xiàn)是從現(xiàn)有的窗口風(fēng)格中去除某一種屬性:

LONG currentStyle=GetWindowLong(m_hWnd,GWL_STYLE); //得到現(xiàn)有窗口的風(fēng)格

SetWindowLong(m_hWnd,GWL_STYLE,currentStyle & ~WS_MAXIMIZEBOX ); 去除了最大化框

 

//在創(chuàng)建窗口后修改圖標(biāo)

SetClassLong(m_hWnd,GCL_HICON,(LONG)LoadIcon(NULL,IDI_WARNING));

 

//在創(chuàng)建窗口后修改光標(biāo)和背景(注:以下代碼在CViewOnCreate函數(shù)中實(shí)現(xiàn):)

SetClassLong(m_hWnd,GCL_HBRBACKGROUND,(LONG)GetStockObject(BLACK_BRUSH)); //設(shè)置背景顏色

SetClassLong(m_hWnd,GCL_HCURSOR,(LONG)LoadCursor(NULL,IDC_CROSS)); //設(shè)置光標(biāo)

 

3.      加載外部導(dǎo)入的圖標(biāo):

LoadIcon如果加載的是系統(tǒng)圖標(biāo),則第一個(gè)參數(shù)是null,但如果是自己的圖標(biāo),則必須取得實(shí)例句柄。MAKEINTRESOURCE宏將資源號(hào)轉(zhuǎn)換為字符指針類型

HICON m_hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON1));

 

      //theApp在別的cpp文件中定義,則必須在本cpp中進(jìn)行extern CStyleApp theApp聲明

HICON m_hIcon=LoadIcon(theApp.m_hInstance,MAKEINTRESOURCE(IDI_ICON2));

 

HICON m_hIcon=LoadIcon(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDI_ICON3));

 

4.      工具欄:

給欄上的圖標(biāo)間加上分隔符:按住鼠標(biāo)左鍵拖動(dòng)分隔符后的圖標(biāo)一小段距離即可。

刪除欄上的圖標(biāo):將指定圖標(biāo)拖出工具欄即可。

創(chuàng)建工具欄:MSDN說明中提供兩種方法

Visual C++ provides you with two methods to create a toolbar. To create a toolbar resource using the Resource Editor, follow these steps:

  1. Create a toolbar resource.
  2. Construct the CToolBar object.
  3. Call the Create (or CreateEx) function to create the Windows toolbar and attach it to the CToolBar object.
  4. Call LoadToolBar to load the toolbar resource.

//創(chuàng)建自己的工具欄,具體的創(chuàng)建過程參看MSDN中的CToolBar部分,以下代碼模仿向?qū)ё詣?dòng)創(chuàng)建的toolbar(代碼也是在CMainFrame類的OnCreate函數(shù)中)

首先創(chuàng)建ToolBar的資源m_newToolBar

//以下代碼放在CMainFrame類的OnCreate函數(shù)中:

if (!m_newToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_LEFT| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||!m_newToolBar.LoadToolBar(IDR_TOOLBAR1))

      {

           TRACE0("Failed to create toolbar\n");

            return -1;      // fail to create

      }

      m_newToolBar.EnableDocking(CBRS_ALIGN_ANY); //使新的toolbar可???/span>

EnableDocking(CBRS_ALIGN_ANY); //使MainFrame可???,因?yàn)榇硕未a已經(jīng)有了,所以省去

DockControlBar(&m_newToolBar); //是新的toolbar停靠在MainFrame

 

Otherwise, follow these steps:

  1. Construct the CToolBar object.
  2. Call the Create (or CreateEx) function to create the Windows toolbar and attach it to the CToolBar object.
  3. Call LoadBitmap to load the bitmap that contains the toolbar button images.
  4. Call SetButtons to set the button style and associate each button with an image in the bitmap.

 

顯示和隱藏工具欄:

//第一種方法:

      if(m_newToolBar.IsWindowVisible()) //工具欄也是一個(gè)窗口

      {

           m_newToolBar.ShowWindow(SW_HIDE);

      }

      else

      {

           m_newToolBar.ShowWindow(SW_SHOW);

      }

      RecalcLayout(TRUE); //整個(gè)工具欄所在的控制欄顯示或消失

      DockControlBar(&m_newToolBar); //將新的toolbar??吭?/span>MainFrame

     

      //第二種方法,這種方法是最好的,一行代碼實(shí)現(xiàn)了上面的功能

ShowControlBar(&m_newToolBar,!m_newToolBar.IsWindowVisible(),FALSE);

 

5.      狀態(tài)欄:

向?qū)?chuàng)建狀態(tài)欄是在CMainFrame類的OnCreate函數(shù)中實(shí)現(xiàn)的,代碼如下:

if (!m_wndStatusBar.Create(this) ||                               !m_wndStatusBar.SetIndicators(indicators,  //indicators

             sizeof(indicators)/sizeof(UINT)))

      {

           TRACE0("Failed to create status bar\n");

           return -1;      // fail to create

}
其中indicators是一個(gè)指示器數(shù)組,它在CMainFrame的源文件中定義:

static UINT indicators[] =

{

      //以下這些資源在string table中定義

      ID_SEPARATOR,           // status line indicator

 

      IDS_TIMER,  //自定義

      IDS_PROGRESS, //自定義

     

      ID_INDICATOR_CAPS,

      ID_INDICATOR_NUM,

      ID_INDICATOR_SCRL,

};

該指示器表示了在狀態(tài)欄中顯示的許多小面板

 

以下代碼實(shí)現(xiàn)在狀態(tài)欄上顯示當(dāng)前時(shí)間(該函數(shù)也是在OnCreate函數(shù)中實(shí)現(xiàn)):

CTime currentTime=CTime::GetCurrentTime();

      CString strTime=currentTime.Format("%Y-%m-%d %H:%M:%S");

      CClientDC dc(this);

      CSize size=dc.GetTextExtent(strTime);

int idx=m_wndStatusBar.CommandToIndex(IDS_TIMER); //在不知道索引的前提下

//SetPaneInfo函數(shù)是設(shè)置面板的style,size

m_wndStatusBar.SetPaneInfo(idx,IDS_TIMER,SBPS_NORMAL,size.cx); //使寬度合適

      //SetPaneText函數(shù)是在指定的面板上顯示內(nèi)容

m_wndStatusBar.SetPaneText(idx,strTime);

 

6.      進(jìn)度欄:

創(chuàng)建類的成員函數(shù):CProgressCtrl m_progress;

創(chuàng)建水平進(jìn)度條

m_progress.Create(WS_CHILD|WS_VISIBLE|PBS_SMOOTH,CRect(100,100,200,120),this,IDS_PROGRESS);

      垂直進(jìn)度條

m_progress.Create(WS_CHILD|WS_VISIBLE|PBS_VERTICAL,CRect(100,100,120,220),this,IDS_PROGRESS);

      m_progress.SetRange(0,100); //設(shè)置范圍

m_progress.SetStep(10); //設(shè)置步進(jìn)長(zhǎng)度

 

將創(chuàng)建的進(jìn)度欄放在狀態(tài)欄的指定編號(hào)的面板上(以下代碼放在OnPaint函數(shù)中):

CRect rect;

      m_wndStatusBar.GetItemRect(2,&rect); //得到狀態(tài)欄上指定面板的矩形大小

      if(!m_progress.m_hWnd)

      m_progress.Create(WS_CHILD|WS_VISIBLE|PBS_SMOOTH,rect,&m_wndStatusBar,IDS_PROGRESS);

      else

           m_progress.MoveWindow(rect); //如果已經(jīng)創(chuàng)建,則只需要將進(jìn)度條移動(dòng)到指定矩形框內(nèi)

      m_progress.SetRange(0,100);

m_progress.SetStep(10);

注:上述代碼沒有放在CMainFrame類的OnCreate函數(shù)中是因?yàn)?/span>OnCreate函數(shù)創(chuàng)建好的時(shí)候窗口上的控件還沒有創(chuàng)建好,所以想得到狀態(tài)欄上指定面板的矩形大小時(shí)候,會(huì)取不到值(可以想象成狀態(tài)欄也是窗口上的一個(gè)控件)。

 

將鼠標(biāo)在視圖上移動(dòng)時(shí)對(duì)應(yīng)的x,y坐標(biāo)時(shí)時(shí)顯示在狀態(tài)欄上

CView類的OnMouseMove函數(shù)中添加:

CString location;

      location.Format("x=%d,y=%d",point.x,point.y);

      方法1

((CMainFrame*)GetParent())->m_wndStatusBar.SetPaneText(0,location,TRUE);

      方法2

SetMessageTextMSDN中的解釋是這樣的:Call this function to place a string in the status-bar pane that has an ID of 0. This is typically the leftmost, and longest, pane of the status bar.

      ((CMainFrame*)GetParent())->SetMessageText(location);

      方法3

GetMessageBarMSDN中解釋:Call this member function to get a pointer to the status bar.

((CMainFrame*)GetParent())->GetMessageBar()->SetWindowText(location);

 

7.      為程序添加啟動(dòng)畫面:

Project->Add To Project->Components and Controls->Visual C++ component->Splash screen

修改啟動(dòng)畫面的等待時(shí)間,其中在函數(shù)OnCreate函數(shù)有設(shè)置:SetTimer(1, 1000, NULL);

利用上述的向?qū)ё詣?dòng)添加了一個(gè)新類,CSplashWnd,并且自動(dòng)在CMainFrame類中的OnCreate函數(shù)中添加了CSplashWnd::ShowSplashScreen(this),也就是將啟動(dòng)畫面添加到了運(yùn)行程序框架類中了。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
孫鑫vc視頻教程筆記(二)
Visual C .NET編程講座之四(3)
Prof-UIS學(xué)習(xí)心得
VC++6.0去掉單文檔中的菜單,工具欄,狀態(tài)欄
狀態(tài)欄編程實(shí)例
淺談VS2010中CMFCToolBar的用法
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服