亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

VC++中的字體設置方法詳解

2020-01-26 15:52:02
字體:
來源:轉載
供稿:網友

VC++中static text字體改變
窗口都有2個和字體有關的函數:
CWnd::GetFont()和SetFont(CFont*, BOOL);
1)CFont* pFont = m_static.GetFont();

2)LOGFONT LogFont;
pFont->GetLogFont(&LogFont);

3)對LogFont直接操縱修改里面的字體選項
 
//如LogFont.lfUnderline = 1;設置下劃線
 LogFont.lfHeight=30;       //字體大小設置
 strcpy(LogFont.lfFaceName, "楷體_GB2312");  //字體設置

4)pFont->Detach();
第四步的目的是將pFont里裝有的HFONT解除關聯,否則pFont無法調用緊接的Create函數。

5)pFont->CreateFontIndirect(&LogFont);
m_static.SetFont(pFont);

6)pFont->Detach();
必須再一次解除在pFont里裝載的HFONT,原因是第5步已經將HFONT賦給了m_static。pFont的任務已完成,不應該持有HFONT資源,它也不能去銷毀HFONT,因為m_static在使用這個HFONT,所以必須是Detach()來解除關聯。

VC++中字體顏色的改變
在OnCtlColor函數中如下代碼:

復制代碼 代碼如下:

 HBRUSH CDlg_SignIn::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
 HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
 // TODO:  Change any attributes of the DC here
   if(nCtlColor == CTLCOLOR_STATIC)
       {
       if(pWnd->GetDlgCtrlID()== IDC_REGARD)
           {
               pDC->SetTextColor(RGB(255,0,0));
               pDC->SetBkColor(RGB(251, 247, 200));//設置文本背景色
               pDC->SetBkMode(TRANSPARENT);//設置背景透明                  
           }
       }
 // TODO:  Return a different brush if the default is not desired
 return hbr;


其他控件的宏定義為:
CTLCOLOR_BTN 按鈕控件
CTLCOLOR_DLG 對話框
CTLCOLOR_EDIT 編輯框
CTLCOLOR_LISTBOX 列表控件
CTLCOLOR_MSGBOX 消息控件
CTLCOLOR_SCROLLBAR 滾動條控件
CTLCOLOR_STATIC 靜態控件

VC中動態改變控件和對話框字體.
1
VC的對話框字體設置對所有控件都有效,你不能單獨地改變某個靜態文本的字體。對于你的問題,需要首先用CreateFont來建立一個字體對象,然后調用控件的SetFont,就可以了。

例子:
1、改靜態文體的ID,如:IDC_STATIC1
2、添加一個Edit控件,建立一個關聯的控件m_editControl。
3、在OnInitDialog中添加如下代碼:
復制代碼 代碼如下:

CFont * f;
     f = new CFont;
     f->CreateFont(16, // nHeight
     0, // nWidth
     0, // nEscapement
     0, // nOrientation
     FW_BOLD, // nWeight
     TRUE, // bItalic
     FALSE, // bUnderline
     0, // cStrikeOut
     ANSI_CHARSET, // nCharSet
     OUT_DEFAULT_PRECIS, // nOutPrecision
     CLIP_DEFAULT_PRECIS, // nClipPrecision
     DEFAULT_QUALITY, // nQuality
     DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily
     _T("Arial")); // lpszFac   
     GetDlgItem(IDC_STATIC1)->SetFont(f);
     CWnd *cWnd = GetDlgItem(IDC_STATIC1);
     cWnd->SetFont(&font);
     cWnd->SetWindowTextW(L"設置需要的內容");

需要注意的是,這里我們使用的是CFont指針,而不是普通的CFont局部變量, 在非MFC程序,首先用CreateFont來建立一個字體句柄,然后再用SendMessage發給控件WM_SETFONT消息,將建立的字體句柄賦值過去,就可以了。 

2 但是整個對話框或窗口的字體的大小,使用對話框或窗口的SetFont()函數卻沒有任何的作用.可以在初始化時遍歷每個控件分別設置來處理,但這里說另一種使用回調函數的簡單方法:
:調用系統的API:::EnumChildWindows(). ,傳入回調函數和重新定義的字體.(第一個參數不用管啊,本來就有啊)

1)在文檔視圖結構中CMainFrame::OnCreate().中調用::EnumChildWindows(). 實現所有窗口和子窗口字體改變

2) 在對話框的OnInitDialog(). 中調用::EnumChildWindows(). 改變對話窗上的所有控件.
回調函數如下:

復制代碼 代碼如下:

/ lParam is a pointer to CFont object
BOOL __stdcall SetChildFont(HWND hwnd, LPARAM lparam)
{
CFont *pFont = (CFont*)lparam;
CWnd *pWnd = CWnd::FromHandle(hwnd);
pWnd->SetFont(pFont);
return TRUE;
}

使用1:
復制代碼 代碼如下:

BOOL CAboutDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
::EnumChildWindows(m_hWnd, ::SetChildFont, (LPARAM)g_Font.GetFont());
return TRUE;  // return TRUE unless you set the focus to a control
  // EXCEPTION: OCX Property Pages should return FALSE
}

使用2:
復制代碼 代碼如下:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
 if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
 if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar/n");
 return -1;      // fail to create
}
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
 TRACE0("Failed to create status bar/n");
return -1;      // fail to create
 }
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
::EnumChildWindows(m_hWnd, ::SetChildFont, (LPARAM)g_Font.GetFont());
return 0;
}
(很好用,不像mfc中的那個垃圾setfont(),設置了對話框的沒有一點反應!)

3 如何在mfc中實現,當系統的字體變大的時候,對話框上面的字體也相應的變大?
復制代碼 代碼如下:

//IconFont
    LOGFONT logFont;
    int  size = sizeof(LOGFONT);
    bool isGood = SystemParametersInfo(SPI_GETICONTITLELOGFONT,size,&logFont,0);
    if(isGood == true)
{
 CFont * f;
f = new CFont;
const LOGFONT* pFont = new LOGFONT(logFont);
f->CreateFontIndirectW(pFont);
 //::EnumChildWindows(m_hWnd, ::SetChildFont, (LPARAM)f);
}
//other Font
NONCLIENTMETRICS ncm = new NONCLIENTMETRICS();               
bool isGood = SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), ref ncm, 0);
if (isGood == true)
{
LOGFONT logFont2;
//logFont2=ncm.lfntCaptionFont);//CaptionFont
 //logFont2 =ncm.lfntSMCaptionFont;//CaptionFont_Small
//logFont2 = ncm.lfntMenuFont;//MenuFont
//logFont2 = ncm.lfntStatusFont;//StatusFont
 logFont2 = ncm.lfntMessageFont;//MessageFont
CFont * f;
 f = new CFont;
const LOGFONT* pFont = new LOGFONT(logFont2);
 f->CreateFontIndirectW(pFont);
 //::EnumChildWindows(m_hWnd, ::SetChildFont, (LPARAM)f);
 }

以上是取得系統字體的大小,然后再調用上面的第二種方法。
窗體上的所有字體都會跟著系統字體的大小改變。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩精品视频中文在线观看| 亚洲aaa激情| 欧美丝袜一区二区三区| 国产亚洲欧洲高清| 97国产一区二区精品久久呦| 亚洲精品电影在线观看| 91精品视频在线播放| 日韩精品在线电影| 欧美疯狂xxxx大交乱88av| 亚洲欧洲av一区二区| 国产精品久久久久久久久免费看| 91久久精品美女| 欧美乱大交xxxxx另类电影| 午夜精品一区二区三区在线| 中文字幕综合在线| 久久国产精品亚洲| 欧美激情久久久| 在线成人中文字幕| 国产精品视频久| 久久高清视频免费| 精品网站999www| 中文字幕亚洲欧美一区二区三区| 国产精品日韩在线播放| 欧美成人精品在线观看| 亚洲欧美国产一本综合首页| 亚洲国产一区自拍| 欧美日韩在线观看视频小说| 热99精品只有里视频精品| 国产日产欧美a一级在线| 日韩成人av在线| 97久久伊人激情网| 精品网站999www| 久久久国产影院| 综合国产在线视频| 欧美中文字幕在线播放| 国产精品久久久亚洲| 欧美视频在线免费看| 两个人的视频www国产精品| 欧美性69xxxx肥| 国产精品免费久久久久久| 国产成人精品久久亚洲高清不卡| 国产亚洲视频在线| 亚洲最大福利网| 日本伊人精品一区二区三区介绍| 91高清视频免费观看| 日韩精品一区二区三区第95| 亚洲2020天天堂在线观看| 国产欧美精品日韩| 国产精品美腿一区在线看| 91精品国产综合久久香蕉| 97精品视频在线| 欧美疯狂xxxx大交乱88av| 欧美精品videos性欧美| 亚洲欧美资源在线| 亚洲福利视频免费观看| 成人免费在线网址| 国产在线精品播放| 欧美色欧美亚洲高清在线视频| 97视频在线观看免费高清完整版在线观看| 久久久久久亚洲| 国产成人自拍视频在线观看| 国产精品福利小视频| 国模极品一区二区三区| 久久久久久久久综合| 日韩av快播网址| 国产99久久久欧美黑人| 亚洲人成网站在线播| 亚洲午夜激情免费视频| 国产精品99蜜臀久久不卡二区| 欧美黑人性视频| 日韩av在线最新| 亚洲美女在线视频| 国产精品久久久久久超碰| 欧美在线观看一区二区三区| 欧美成人黄色小视频| 日韩电影中文 亚洲精品乱码| 欧美怡红院视频一区二区三区| 国产精品白嫩美女在线观看| 81精品国产乱码久久久久久| 欧美性猛交xxxx| 国产成人+综合亚洲+天堂| 欧美性猛交xxxx富婆弯腰| 亚洲自拍小视频免费观看| 日韩欧美在线视频| 色樱桃影院亚洲精品影院| 精品久久久久久久久久久| 国产在线观看精品一区二区三区| 国产精品久久久久久久av电影| 韩国v欧美v日本v亚洲| 免费不卡在线观看av| 亚洲亚裔videos黑人hd| 国产日产欧美a一级在线| 亚洲男人天堂2019| 精品国偷自产在线视频| 欧美超级乱淫片喷水| 国内精久久久久久久久久人| 91在线视频精品| 欧美性xxxx极品hd欧美风情| 美日韩丰满少妇在线观看| 日韩欧美999| 欧美激情国产日韩精品一区18| 欧美视频在线观看免费| 国产一区二区三区精品久久久| 亚洲欧美日韩精品久久亚洲区| 色综合久久久888| 国产剧情日韩欧美| 都市激情亚洲色图| 欧美高清自拍一区| 精品国产福利视频| 日韩在线一区二区三区免费视频| 欧美一级片免费在线| 综合欧美国产视频二区| 国产精品v日韩精品| 亚洲精品一区二区三区不| 日韩欧美在线视频免费观看| 亚洲三级黄色在线观看| 国产免费一区二区三区在线能观看| 午夜精品在线观看| 最新中文字幕亚洲| 欧美另类老女人| 欧美性理论片在线观看片免费| 亚洲国产成人在线视频| 91夜夜揉人人捏人人添红杏| 在线性视频日韩欧美| 欧美中文字幕视频| 亚洲视频日韩精品| 亚洲免费成人av电影| zzjj国产精品一区二区| 欧美在线视频网| 日日骚av一区| 国产精品678| 日本午夜在线亚洲.国产| 91精品视频网站| 精品久久久久久久久久久久久| 91精品国产成人www| 亚洲va国产va天堂va久久| 久久这里只有精品99| 精品亚洲夜色av98在线观看| 日韩电影中文字幕在线| 色综合久久中文字幕综合网小说| 国产精品中文字幕在线观看| 啪一啪鲁一鲁2019在线视频| 日韩av电影手机在线| 这里只有精品丝袜| 日韩av中文字幕在线| 欧美在线激情视频| 在线电影欧美日韩一区二区私密| 欧美激情2020午夜免费观看| 日韩欧美中文字幕在线观看| 欧美极品在线视频| 亚洲性线免费观看视频成熟| 成人在线精品视频| 亚洲国产日韩精品在线| 成人高h视频在线| 久久久999国产精品| 亚洲欧美国产另类| 亚洲美女动态图120秒| 97精品一区二区三区| 日韩精品高清在线| 日韩精品有码在线观看| 国产自摸综合网| 45www国产精品网站| 国产一区视频在线| 韩国福利视频一区|