如何繼承CStatic類使介面文字顯示不再單調

2021-06-27 12:56:06 字數 2140 閱讀 7862

如何繼承cstatic類使介面文字顯示不再單調

在vc中僅提供了基本的靜態文字顯示控制項static,它使用父視窗預設的字型風格顯示,在許多應用中顯得過於單調,如何使static能夠按照自己需要的風格顯示,我這裡給大家提供一種方法,大家可以自己試試。

1.建立vc工程,在工程中基於基類cstaitc,派生出自己的cstaitcex類,加該類到你的工程中,當然你使用類生成嚮導,檔案自然會加入到你的工程中。一般來說生成的檔案為staticex.cpp和staticex.h。

2.編寫cstaticex類

在staticex類中加入邏輯字型變數、顏色變數、字串變數:

logfont m_logfont;

colorref m_textcolor;

cstring m_windowstext;

然後增加函式(public屬性)

void settextsize(int size = 15)//引數為邏輯字型大小

void settextfont(cstring fontname)//引數為邏輯字型名

void settextweight(int weight)            // 引數為邏輯字型粗細 (value from 0 to 1000 and step is 100)

void settextcolor(colorref crcolor)

增加cstaticex類的wm_paint訊息對映(可以用classwizard),然後在onpaint裡新增**

crect nrect;

cfont newfont, *oldfont;

newfont.createfontindirect(&m_logfont);

oldfont = dc.selectobject(&newfont);

dc.setbkmode(transparent); 

//opaque background is filled transparent

dc.settextcolor(m_textcolor);

getwindowtext(m_windowtext);

getclientrect(&nrect);

dc.textout((nrect.right/2), 0, m_windowtext);

dc.selectobject(oldfont);

另外,建構函式中加入下列初始化** (這段**在實際使用中發現,不用加,加了反而影響字型設定)

cstaticex::cstaticex()

完成上述**,我們就可以在工程中使用該類實現任意大小、顏色和字型的文字顯示了。

3.使用你的cstaticex類

在你的工程中,向以前一樣拖乙個staic到你的介面上,然後手動新增變數:

cstaticex m_staticex;建議添在如下處,因為新增後在類嚮導的變數對映表中可以顯示出來。

// dialog data

//;cstaticex m_staticex;

//}}afx_data

然後重要的一步就是在資料交換中增加你的類和控制項之間的關聯(假如你static控制項的名稱是idc_mystatic):

void cdlg::dodataexchange(cdataexchange* pdx)

}afx_data_map}

最後一步了,在你的工程介面初始化的時候呼叫你剛才cstaticex中自己定義的函式,你就會發現你的靜態文字由你來控制了,當然依次類推,邏輯字型longfont中所能體現的字型風格你都是可以實現的。

m_staticex.settextcolor(rgb(100, 0, 0));

m_staticex.settextsize(25);

m_staticex.settextweight(700);

m_staticex.settextfont("隸書");

4.總結

其實vc的基本控制項的風格顯示基本上都可以按照這種繼承方式來實現自定義,自己可以試試。

TypeScript類 介面 繼承

class point tostring let p new point 1,2 在ts裡,成員都預設為public。被public修飾的屬性,我們在類的內外都可以自由訪問到這些被定義的屬性。class animal new animal cat name cat 當成員被標記成private時,它...

類的繼承 介面

一般類在繼承時用到extends關鍵字。子類可以繼承父類中的方法,用子類建立的物件可以直接呼叫父類中的方法,但是父類建立出的物件不可以呼叫子類中的方法。建立子類物件並自動轉型為父類物件,不能呼叫子類中特有的方法,可以呼叫子類中重寫的方法。package com.nhd0702 public clas...

抽象類 介面 繼承

抽象類 抽象類提供多個派生類共享基類的公共定義,它既可以提供抽象方法,也可以提供非抽象方法。抽象類不能例項化,必須通過繼承由派生類實現其抽象方法,因此對抽象類不能使用new關鍵字,也不能被密封。如果派生類沒有實現所有的抽象方法,則該派生類也必須宣告為抽象類。否則,必須實現抽象類的方法和屬性,實現抽象...