MFC單文件狀態列字型灰色的解決和疑問

2021-10-03 16:59:14 字數 1835 閱讀 1389

首先我的開發環境是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...