視窗類別–字型關係

來源:互聯網
上載者:User

每建立一個從CWnd繼承來的視窗,該視窗都有預設字型的。

如果通過pWnd->GetFont();返回空值,代表該視窗使用系統字型。

下面貼段代碼。

//// CWnd -- pFtWnd is NULL//m_wnd.Create(NULL, NULL, WS_CHILD|WS_VISIBLE, CRect(0,0,100,100), this, 0);//LOGFONT lfWnd;//CFont * pFtWnd = m_wnd.GetFont();////pFtWnd->GetLogFont(&lfWnd);//// CWnd(Test) -- WC_LISTVIEW -- pFtWndTest is ("微軟雅黑")//              -- WC_TABCONTROL -- pFtWndTest is ("System")m_wndTest.Create(WC_TABCONTROL, NULL, WS_CHILD|WS_VISIBLE, CRect(0,0,100,50), this, 0);LOGFONT lfWndTest;CFont * pFtWndTest = m_wndTest.GetFont();pFtWndTest->GetLogFont(&lfWndTest);int a = 20;// CEdit -- pFtEdit is NULL//m_edit.Create(WS_CHILD|WS_VISIBLE, CRect(0,0,100,100), this, 0);//LOGFONT lfEdit;//CFont * pFtEdit = m_edit.GetFont();//pFtEdit->GetLogFont(&lfEdit);// CButton -- pFtBtn is NULL//CButton btn;//btn.Create(L"CButton", WS_CHILD|WS_VISIBLE, CRect(0,0,100,20), this, 0);//CFont * pFtBtn = btn.GetFont();//LOGFONT lfBtn;//pFtBtn->GetLogFont(&lfBtn);//========= Control ===========================//// CSliderCtrl -- pFtSliderCtrl is NULL//CSliderCtrl sliderCtrl;//sliderCtrl.Create(WS_CHILD|WS_VISIBLE, CRect(0,0,200,100), this, 0);//CFont * pFtSliderCtrl = sliderCtrl.GetFont();//LOGFONT lfSliderCtrl;//pFtSliderCtrl->GetLogFont(&lfSliderCtrl);// CHeaderCtrl -- pFtHeaderCtrl is NULL//CHeaderCtrl headerCtrl;//headerCtrl.Create(WS_CHILD|WS_VISIBLE, CRect(0,0,200,100), this, 0);//CFont * pFtHeaderCtrl = headerCtrl.GetFont();//LOGFONT lfHeaderCtrl;//pFtHeaderCtrl->GetLogFont(&lfHeaderCtrl);// CListCtrl -- 字型"微軟雅黑"//m_listCtl.Create(WS_CHILD|WS_VISIBLE|LVS_REPORT, CRect(0,0,300,50), this, 0);//CFont * pFtListCtrl = m_listCtl.GetFont();//LOGFONT lfListCtrl;//pFtListCtrl->GetLogFont(&lfListCtrl);//m_listCtl.InsertColumn(0,L"Student1",0,150);//m_listCtl.InsertColumn(1,L"Student2",0,150);//LOGFONT lf;//memset(&lf, 0, sizeof(LOGFONT));//::GetObject((HFONT)GetStockObject(DEFAULT_GUI_FONT), sizeof(lf), &lf);//CFont ft;//ft.CreateFontIndirect(&lf);//m_listCtl.SetFont(&ft);// CTreeCtrl -- 字型"微軟雅黑"//CTreeCtrl treeCtrl;//treeCtrl.Create(WS_CHILD|WS_VISIBLE, CRect(0,0,200,100), this, 0);//CFont * pFtTreeCtrl = treeCtrl.GetFont();//LOGFONT lfTreeCtrl;//pFtTreeCtrl->GetLogFont(&lfTreeCtrl);// CTabCtrl -- 字型"System"//CTabCtrl tabCtrl;//tabCtrl.Create(WS_CHILD|WS_VISIBLE, CRect(0,0,200,100), this, 0);//CFont * pFtTabCtrl = tabCtrl.GetFont();//LOGFONT lfTabCtrl;//pFtTabCtrl->GetLogFont(&lfTabCtrl);// CRichEditCtrl -- pFtRichEditCtrl is NULL//CRichEditCtrl richEditCtrl;//richEditCtrl.Create(WS_CHILD|WS_VISIBLE, CRect(0,0,200,100), this, 0);//CFont * pFtRichEditCtrl = richEditCtrl.GetFont();//LOGFONT lfRichEditCtrl;//pFtRichEditCtrl->GetLogFont(&lfRichEditCtrl);//int a = 20;

通過LOGFONT lf3;
memset(&lf3, 0, sizeof(LOGFONT));
::GetObject((HFONT)GetStockObject(SYSTEM_FONT), sizeof(lf3), &lf3);

擷取的是註冊表中儲存的字型值。MFC中的各種標準控制項擷取的預設字型都是不一樣的,有的返回NULL,在WIN7下,有的返回微軟雅黑,有的返回System。這是為什麼呢??

又調試了一會,我用下面的API直接建立視窗。

我然後直接指定視窗類別名,因為

#define WC_LISTVIEW "SysListView32"

#define WC_TREEVIEW "SysTreeView32"

這二個視窗類別擷取的預設字型為系統當前正在使用的字型

而#define WC_TABCONTROL "SysTabControl32"使用的字型是"System"

下面貼段直接調用API來擷取邏輯字型LOGFONT。

BOOL CInfoPane::GetSysFont(LOGFONT &lf){memset(&lf, 0, sizeof(LOGFONT));HWND hWnd = ::CreateWindow(_T("SysListView32"), NULL, WS_CHILD|WS_VISIBLE,0,0,0,0, ::GetDesktopWindow(), NULL, AfxGetInstanceHandle(), 0);HFONT hFont = (HFONT)::SendMessage(hWnd, WM_GETFONT, 0, 0);::GetObject(hFont, sizeof(LOGFONT), &lf);::DestroyWindow(hWnd);return TRUE;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.