首先我的開發環境是vs2017,在程式中想加入乙個狀態列顯示滑鼠的座標。
由於我當初建立專案時沒有勾選狀態列,所以沒有系統預設的狀態列,就需要手動新增。
首先新建自定義的狀態列cmfcstatusbar mystatusbar;
新增狀態編輯器
static uint indicators=
;
然後再在oncreate函式中寫上
if
(!mystatusbar.
createex
(this))
mystatusbar.
setindicators
(indicators,
sizeof
(indicators)
/sizeof
(uint));
mystatusbar.
setpaneinfo(0
, id_separator, sbps_popout,50)
;mystatusbar.
setpaneinfo(1
, id_indicator_x, sbps_popout,50)
;mystatusbar.
setpaneinfo(2
, id_indicator_y, sbps_popout,50)
;mystatusbar.
setpaneinfo(3
, id_indicator_ext, sbps_popout,50)
;
標準建立過程。再新增on_command訊息,不新增訊息,狀態列字型會是灰色。
on_command
(id_indicator_x,
null
)on_command
(id_indicator_y,
null
)on_command
(id_indicator_ext,
null
)
再參照csdn上講的新增滑鼠移動的函式即可顯示座標資訊。
最後的問題是,生成後的座標顯示還是有灰色的,比如這樣:
圖里的y座標顯示為灰色,按照之前的方法應該是未新增on_command訊息,但實際上已經新增了。
查來查去最後發現更改設定狀態列的資訊順序,錯誤就會顛倒。x,y中後被執行的就會顯示灰色。
mystatusbar.
setpaneinfo(0
, id_separator, sbps_popout,50)
; mystatusbar.
setpaneinfo(2
, id_indicator_x, sbps_popout,50)
; mystatusbar.
setpaneinfo(1
, id_indicator_y, sbps_popout,50)
; mystatusbar.
setpaneinfo(3
, id_indicator_ext, sbps_popout,50)
;
於是去查id,發現兩者id值並不衝突:
但是setpaneinfo只能使乙個有效,於是乎改掉其中過乙個id執行結果如下
最終顯示正常!!
其中反反覆覆嘗試,發現問題還是出在id值為59142上,不論x,y誰的id為59142,只要出現59142,加上setpaneinfo的順序,就會出現兩個座標有乙個顯示為灰色的問題,去掉59142id值,則執行正常,在resource.h中也對比過,沒有重複的id值為59142,但是出現59142就會有上面的問題,很無語為什麼會有這種情況。
MFC單文件設定狀態列顏色
最近在處理關於mfc單文件的相關問題,在這裡就一一的做乙個總結,方便大家學習交流,也給自己留乙個記錄,方便後期回顧。下面進入正文 首先要知道狀態列的定義 cstatusbar,我在網上查過,可以使用cmfcstatusbar,對狀態列進行顏色,文字,高度等的設定,關於該類的說明很多,這裡我就不多說。...
MFC單文件去掉預設的選單 工具欄和狀態列
1,去掉工具欄和狀態列,在 int cmainframe oncreate lpcreatestruct lpcreatestruct 中登出掉相關的工具欄和狀態列語句,即可。2,去掉選單,在 bool cmainframe precreatewindow createstruct cs 中,增加語...
MFC 單文件應用程式如何為狀態列新增進度條
1.將cmainframe標頭檔案中的m wndstatusbar變數的訪問屬性修改為public public cmfcstatusbar m wndstatusbar 2.新增ids progress標識的字串,並將標題修改為進度條 3.將cmainframe原始檔中指示器修改為如下 stati...