程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> VC++ >> VC精華教程:MFC入門系列(五)

VC精華教程:MFC入門系列(五)

編輯:VC++

  程序作者:zhoujiamurong 個人郵箱:[email protected]
  作者保留作品的所有權利,如需轉載請聯系作者。  

  大家都在催我繼續寫,我真得很想寫快點,不過我寫這一篇文章得3-4個小時。我不希望大家看了不懂,或者沒學到什麼東西。寫該系列文章,另一個原因就是想還Vchelp站長聞怡洋和雷神的人情,我在學VC很困難的時候,學習了雷神的文章和教程和聞站長的教程.有了很好的學習效果,在市面上很多的書籍一上來就是向導,很多人就是看不明白而放棄學VC。我希望大家也不要放棄,我又將我的這點爛文章發到網站去了.希望有更多的人來學習VC,也希望大家有什麼體會和心得或發現也能夠寫出來大家共享。

  下面我接著上一節的內容來講,我們已經將工具條和狀態條的外觀畫好,現在要為這個工具條和狀態欄加上響應,也就是消息映射和處理函數,我們先將一些無關緊要的消息框去掉。然後添加消息映射:

  ON_COMMAND(ID_DISPLAY_UP, up)
  ON_COMMAND(ID_DISPLAY_DOWN,down)
  ON_COMMAND(ID_DISPLAY_LEFT,left)
  ON_COMMAND(ID_DISPLAY_RIGHT,right)


  消息映射宏ON_COMMAND接兩個參數,第一個是資源ID號,第二個是響應函數的名字。我們要在sample類裡面加上這些函數

void up()
{
::MessageBox(0,"up","消息",MB_OK);
}
void down()
{
::MessageBox(0,"down","消息",MB_OK);
}
void left()
{
::MessageBox(0,"left","消息",MB_OK);
}
void right()
{
::MessageBox(0,"right","消息",MB_OK);
}

  我們再運行一下程序,我們發現工具條變靓了,因為有了消息映射,所以工具條和菜單都從無效變成有效了。

  下面,我們想在狀態欄裡顯示鼠標的坐標。翻譯成計算機的語言,也就是說,在鼠標移動的時候,我們獲得鼠標的坐標,將這個坐標(整型)轉換成字符串,然後,將這個字符串賦值給狀態欄的一個窗格。

  下面我們來實現它,首現我們要在狀態欄添加一個網格,更改代碼

  UINT stat[]={0,ID_INDICATOR_NUM,ID_INDICATOR_CAPS};


  為

  UINT stat[]={0,0,ID_INDICATOR_NUM,ID_INDICATOR_CAPS};


  再更改,

  s.SetIndicators(stat,3);


  為

  s.SetIndicators(stat,4);


  我們就添加了一個窗格,我們還要為鼠標移動添加消息映射,使用MFC定義好的宏ON_WM_MOUSEMOVE(),直接放到消息映射裡面就可以了,下面添加消息映射的處理函數void OnMouseMove(UINT nFlags, CPoint point) 通過這個函數我們可以得到兩個參數:uFlags和point,這兩個參數.我們在MSDN種查到對這兩個參數的描述:
  nFlags
  Indicates whether various virtual keys are down. This parameter can be any combination of the following values:

  指示哪些鍵被按下。這個參數可以是以下值的任意組合:
  • MK_CONTROL Set if the CTRL key is down. //CTRL鍵
  • MK_LBUTTON Set if the left mouse button is down.//鼠標左鍵
  • MK_MBUTTON Set if the middle mouse button is down.//鼠標中鍵
  • MK_RBUTTON Set if the right mouse button is down.//鼠標右鍵
  • MK_SHIFT Set if the SHIFT key is down. //SHIFT鍵

  point
  Specifies the x- and y-coordinate of the cursor. These coordinates are always relative to the upper-left corner of the window.

  指示光標的坐標。這個光標是相對於窗體的左上角的。

  這是我們要找的參數就是point,那麼這個參數是CPoint 類型的,我們再查CPoint 類型,如何查呢?一種查MSDN,另一種在工程中,右鍵點擊CPoint這個文字,出來的右鍵菜單中,點擊goto the definition of CPoint 。我們看到了MFC的源碼,CPoint本身是一個類,但是它是繼承於一個結構的(tagPOINT)。我們看它的原始定義:

typedef struct tagPOINT
{
LONG x;
LONG y;
} POINT, *PPOINT, NEAR *NPPOINT, FAR *LPPOINT;


  所以,我們就認為point 是一個結構。我們就把它當結構來用。我們已經得到了這個坐標(point.x,point.y),但是,它們都是長整型的,我們要把它轉換成字符串。轉換要使用一個類CString。這是字符串類,當然有轉換函數。添加一下代碼

CString str;//這是我們最後要賦值的字符串;
CString str_x;//X坐標
CString str_y;//Y坐標
str_x.Format("%d",point.x);//轉換point.x到str_x
str_y.Format("%d",point.y); //轉換point.y到str_y
str+="X: ";
str+=str_x;
str+=" ";
str+="Y: ";
str+=str_y;//以上是連接字符串到str中
s.SetPaneText(1,str,TRUE);//最後賦值給窗格
str_x.Empty();//下面是釋放空間
str_y.Empty();
str.Empty();


  我們再運行一下程序,我們晃動鼠標,觀察狀態欄的變化。是不是和畫圖軟件的狀態欄有點象。

  下一步,我們添加String Table。再資源中添加,添加一個ID_INDICATOR_CAPS,標題自己定,在添加一個ID_INDICATOR_NUM,標題自己定。

  再運行,我們按下num lock 或者 Caps lock鍵,看一下狀態欄的變化,我們就建立了這樣一個小程序。

  下一篇,我們講GDI,使用GDI來創建一個小的程序。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved