青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

浪跡天涯

唯有努力...
努力....再努力...

如何更改屬性頁向?qū)ы摰淖煮w

前段時(shí)間,一個(gè)底層開發(fā)的同事寫一個(gè)MFC工具,在想實(shí)現(xiàn)設(shè)置屬性頁字體時(shí)遇到了困難,問我該如何實(shí)現(xiàn)?根據(jù)多年的經(jīng)驗(yàn),想當(dāng)然的以為很簡(jiǎn)單,只需在資源里,更改對(duì)話框的字體即可,試了試不行;那就CreateFont,然后SetFont,可是無論怎么弄,程序運(yùn)行后,屬性頁的字體依然如故!在網(wǎng)上搜索也沒有找到好的解決辦法,最后折騰許久,終于找到一篇文章,最終把這個(gè)問題解決了。
  
文章:http://support.microsoft.com/default.aspx?scid=kb;en-us;142170
示例下載:http://download.microsoft.com/download/vc60pro/samp40/1/win98/en-us/prpfont.exe

概要

PRPFONT 說明如何為您 CPropertyPages 在資源編輯器, 并在運(yùn)行時(shí)設(shè)置所需字體, 設(shè)置要和一切正常大小相同表的字體。 所有這是一個(gè)類稱為 CMySheet 中完成。 調(diào)用 ChangeDialogFont() 函數(shù)進(jìn)行調(diào)整窗口以及設(shè)置字體工作。 CPropertySheet::BuildPropPageArray() 被覆蓋以便不重置網(wǎng)頁中字體。

更多信息

在 VisualC++ 的版本低于 4.0, MFC 必須自己實(shí)現(xiàn) CPropertySheet。 對(duì)于您 CPropertySheet 通過資源編輯器中設(shè)置首 CPropertyPage 您對(duì)話框資源的字體可能設(shè)置字體。 在運(yùn)行時(shí), 表將使用字體設(shè)置并一切根據(jù)字體大小。 開頭 VisualC++4.0, MFC 使用 Windows 95 PropertySheet 控件。 此控件將始終使用系統(tǒng)字體來表。 這是設(shè)計(jì)使然。 MFC 還將強(qiáng)制頁以用作表相同字體。 這樣調(diào)用 BuildPropPageArray() 函數(shù)中。 因?yàn)檫@是無出處函數(shù), 它可能更改或?qū)淼?MFC 版本中被刪除。

CMySheet 將使用的首活動(dòng) CPropertyPage 字體來設(shè)置字體和 CPropertySheet 和其子窗口大小。 CPropertyPages 與資源編輯器中指定字體顯示。

具體步驟:
1、新建類CMySheet,繼承自CPropertySheet
2、在.cpp文件中大概實(shí)現(xiàn)如下。
3、修改.h文件。
4、使用這個(gè)CMySheet,更改資源中的屬性頁,則程序運(yùn)行后,設(shè)置的字體有效。

#define WM_RESIZEPAGE WM_APP+1

enum { CDF_CENTER, CDF_TOPLEFT, CDF_NONE };

// helper function which sets the font for a window and all its children
// and also resizes everything according to the new font
void ChangeDialogFont(CWnd* pWnd, CFont* pFont, int nFlag)
{
 CRect windowRect;

 // grab old and new text metrics
 TEXTMETRIC tmOld, tmNew;
 CDC * pDC = pWnd->GetDC();
 CFont * pSavedFont = pDC->SelectObject(pWnd->GetFont());
 pDC->GetTextMetrics(&tmOld);
 pDC->SelectObject(pFont);
 pDC->GetTextMetrics(&tmNew);
 pDC->SelectObject(pSavedFont);
 pWnd->ReleaseDC(pDC);

 long oldHeight = tmOld.tmHeight+tmOld.tmExternalLeading;
 long newHeight = tmNew.tmHeight+tmNew.tmExternalLeading;

 if (nFlag != CDF_NONE)
 {
  // calculate new dialog window rectangle
  CRect clientRect, newClientRect, newWindowRect;

  pWnd->GetWindowRect(windowRect);
  pWnd->GetClientRect(clientRect);
  long xDiff = windowRect.Width() - clientRect.Width();
  long yDiff = windowRect.Height() - clientRect.Height();
 
  newClientRect.left = newClientRect.top = 0;
  newClientRect.right = clientRect.right * tmNew.tmAveCharWidth / tmOld.tmAveCharWidth;
  newClientRect.bottom = clientRect.bottom * newHeight / oldHeight;

  if (nFlag == CDF_TOPLEFT) // resize with origin at top/left of window
  {
   newWindowRect.left = windowRect.left;
   newWindowRect.top = windowRect.top;
   newWindowRect.right = windowRect.left + newClientRect.right + xDiff;
   newWindowRect.bottom = windowRect.top + newClientRect.bottom + yDiff;
  }
  else if (nFlag == CDF_CENTER) // resize with origin at center of window
  {
   newWindowRect.left = windowRect.left -
       (newClientRect.right - clientRect.right)/2;
   newWindowRect.top = windowRect.top -
       (newClientRect.bottom - clientRect.bottom)/2;
   newWindowRect.right = newWindowRect.left + newClientRect.right + xDiff;
   newWindowRect.bottom = newWindowRect.top + newClientRect.bottom + yDiff;
  }
  pWnd->MoveWindow(newWindowRect);
 }

 pWnd->SetFont(pFont);

 // iterate through and move all child windows and change their font.
 CWnd* pChildWnd = pWnd->GetWindow(GW_CHILD);

 while (pChildWnd)
 {
  pChildWnd->SetFont(pFont);
  pChildWnd->GetWindowRect(windowRect);

  CString strClass;
  ::GetClassName(pChildWnd->m_hWnd, strClass.GetBufferSetLength(32), 31);
  strClass.MakeUpper();
  if(strClass==_T("COMBOBOX"))
  {
   CRect rect;
   pChildWnd->SendMessage(CB_GETDROPPEDCONTROLRECT,0,(LPARAM) &rect);
   windowRect.right = rect.right;
   windowRect.bottom = rect.bottom;
  }

  pWnd->ScreenToClient(windowRect);
  windowRect.left = windowRect.left * tmNew.tmAveCharWidth / tmOld.tmAveCharWidth;
  windowRect.right = windowRect.right * tmNew.tmAveCharWidth / tmOld.tmAveCharWidth;
  windowRect.top = windowRect.top * newHeight / oldHeight;
  windowRect.bottom = windowRect.bottom * newHeight / oldHeight;
  pChildWnd->MoveWindow(windowRect);
  
  pChildWnd = pChildWnd->GetWindow(GW_HWNDNEXT);
 }
}
/////////////////////////////////////////////////////////////////////////////
// CMySheet

IMPLEMENT_DYNAMIC(CMySheet, CPropertySheet)

CMySheet::CMySheet(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage)
 :CPropertySheet(nIDCaption, pParentWnd, iSelectPage)
{
}

CMySheet::CMySheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage)
 :CPropertySheet(pszCaption, pParentWnd, iSelectPage)
{
}

CMySheet::~CMySheet()
{
 if (m_fntPage.m_hObject)
  VERIFY (m_fntPage.DeleteObject ());
}

BEGIN_MESSAGE_MAP(CMySheet, CPropertySheet)
 //{{AFX_MSG_MAP(CMySheet)
 //}}AFX_MSG_MAP
 ON_MESSAGE (WM_RESIZEPAGE, OnResizePage) 
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMySheet message handlers

void CMySheet::BuildPropPageArray()
{
 CPropertySheet::BuildPropPageArray();

 // get first page
 CPropertyPage* pPage = GetPage (0);
 ASSERT (pPage);
 
 // dialog template class in afxpriv.h
 CDialogTemplate dlgtemp;
 // load the dialog template
 VERIFY (dlgtemp.Load (pPage->m_psp.pszTemplate));
 // get the font information
 CString strFace;
 WORD wSize;
 VERIFY (dlgtemp.GetFont (strFace, wSize));
 if (m_fntPage.m_hObject)
  VERIFY (m_fntPage.DeleteObject ());
 // create a font using the info from first page
 VERIFY (m_fntPage.CreatePointFont (wSize*10, strFace));
}

BOOL CMySheet::OnInitDialog()
{
 CPropertySheet::OnInitDialog();

 // get the font for the first active page
 CPropertyPage* pPage = GetActivePage ();
 ASSERT (pPage);

 // change the font for the sheet
 ChangeDialogFont (this, &m_fntPage, CDF_CENTER);
 // change the font for each page
 for (int iCntr = 0; iCntr < GetPageCount (); iCntr++)
 {
  VERIFY (SetActivePage (iCntr));
  CPropertyPage* pPage = GetActivePage ();
  ASSERT (pPage);
  ChangeDialogFont (pPage, &m_fntPage, CDF_CENTER);
 }

 VERIFY (SetActivePage (pPage));

 // set and save the size of the page
 CTabCtrl* pTab = GetTabControl ();
 ASSERT (pTab);

 if (m_psh.dwFlags & PSH_WIZARD)
 {
  pTab->ShowWindow (SW_HIDE);
  GetClientRect (&m_rctPage);

  CWnd* pButton = GetDlgItem (ID_WIZBACK);
  ASSERT (pButton);
  CRect rc;
  pButton->GetWindowRect (&rc);
  ScreenToClient (&rc);
  m_rctPage.bottom = rc.top-2;
 }
 else
 {
  pTab->GetWindowRect (&m_rctPage);
  ScreenToClient (&m_rctPage);
  pTab->AdjustRect (FALSE, &m_rctPage);
 }

 // resize the page 
 pPage->MoveWindow (&m_rctPage);

 return TRUE;
}

BOOL CMySheet::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
 NMHDR* pnmh = (LPNMHDR) lParam;

 // the sheet resizes the page whenever it is activated so we need to size it correctly
 if (TCN_SELCHANGE == pnmh->code)
  PostMessage (WM_RESIZEPAGE);
 
 return CPropertySheet::OnNotify(wParam, lParam, pResult);
}

LONG CMySheet::OnResizePage (UINT, LONG)
{
 // resize the page
 CPropertyPage* pPage = GetActivePage ();
 ASSERT (pPage);
 pPage->MoveWindow (&m_rctPage);

 return 0;
}

BOOL CMySheet::OnCommand(WPARAM wParam, LPARAM lParam)
{
 // the sheet resizes the page whenever the Apply button is clicked so we need to size it correctly
 if (ID_APPLY_NOW == wParam ||
  ID_WIZNEXT == wParam ||
  ID_WIZBACK == wParam)
  PostMessage (WM_RESIZEPAGE);
 
 return CPropertySheet::OnCommand(wParam, lParam);
}

posted on 2008-01-25 17:42 浪跡天涯 閱讀(5686) 評(píng)論(10)  編輯 收藏 引用 所屬分類: C++

評(píng)論

# re: 如何更改屬性頁向?qū)ы摰淖煮w 2008-01-30 09:21 追夢(mèng)時(shí)代

學(xué)習(xí)了,謝謝樓主  回復(fù)  更多評(píng)論   

# re: 如何更改屬性頁向?qū)ы摰淖煮w 2008-07-25 00:02 cuckoo321

寫的很不錯(cuò)。請(qǐng)問大俠,如何更改屬性頁的標(biāo)題字體和字號(hào)?  回復(fù)  更多評(píng)論   

# re: 如何更改屬性頁向?qū)ы摰淖煮w 2008-07-28 08:56 浪擊天涯

你可以試試這樣行嗎?

怎樣改變標(biāo)題欄的寬度:

方法一:

NONCLIENTMETRICS ncm;
ncm.cbSize = sizeof( NONCLIENTMETRICS );

::SystemParametersInfo( SPI_GETNONCLIENTMETRICS,
sizeof( NONCLIENTMETRICS ),
&ncm,
0
);

ncm.lfCaptionFont.lfHeight = -300;
::SystemParametersInfo( SPI_SETNONCLIENTMETRICS,
sizeof( NONCLIENTMETRICS ),
&ncm,
SPIF_SENDCHANGE
);
 

方法二:

case WM_NCCALCSIZE:
{
BOOL bSpecial=FALSE;
int nEdgeWidth =3;
int nBarHeight =CAPTIONHEIGHT+3;
int nBottomEdge =3;

if(!(BOOL)wParam)
{
RECT rtSave;
CopyRect(&rtSave,(LPRECT)lParam);
// ::CallWindowProcA(lpwndinfo->pWndProc,hWnd,uMsg,wParam,lParam);


if(lpwndinfo->bIM ==TRUE)
{
int imbarheight =17;
rtSave.left+=nEdgeWidth;
rtSave.top+=imbarheight+3;
rtSave.right-=nEdgeWidth;
rtSave.bottom-=nBottomEdge;
}
else
{
rtSave.left+=nEdgeWidth;
rtSave.top+=nBarHeight;
rtSave.right-=nEdgeWidth;
rtSave.bottom-=nBottomEdge;
}
CopyRect((LPRECT)lParam,&rtSave);

*lResult=0;
::ReleaseDC(hWnd,hDC);
return TRUE;
}
else
{
RECT rtSave;
LPRECT prtClt;
LPNCCALCSIZE_PARAMS pNC;
pNC=(LPNCCALCSIZE_PARAMS)lParam;

prtClt=&(pNC->rgrc[0]);
CopyRect(&rtSave,prtClt);
CopyRect( &(pNC->rgrc[2]), &(pNC->rgrc[1]));

if(bSysDlg)
{
(pNC->rgrc[2]).left +=nEdgeWidth;
(pNC->rgrc[2]).right -=nEdgeWidth;
}
else
{
if(lpwndinfo->bIM ==TRUE)
{
int imbarheight =17;
(pNC->rgrc[2]).left +=nEdgeWidth;
(pNC->rgrc[2]).top +=imbarheight+3;
(pNC->rgrc[2]).right -=nEdgeWidth;
(pNC->rgrc[2]).bottom -=nBottomEdge;

rtSave.left+=nEdgeWidth;
rtSave.top+=imbarheight+3;
rtSave.right-=nEdgeWidth;
rtSave.bottom-=nBottomEdge;
}
else
{
(pNC->rgrc[2]).left+=nEdgeWidth;
(pNC->rgrc[2]).top+=nBarHeight;
(pNC->rgrc[2]).right-=nEdgeWidth;
(pNC->rgrc[2]).bottom-=nBottomEdge;
// Result=::CallWindowProcA(lpwndinfo->pWndProc,hWnd,uMsg,wParam,lParam);
//prtClt=&(pNC->rgrc[0]);
rtSave.left+=nEdgeWidth;
rtSave.top+=nBarHeight;
rtSave.right-=nEdgeWidth;
rtSave.bottom-=nBottomEdge;
}
}
CopyRect(prtClt,&rtSave);
*lResult=0;
::ReleaseDC(hWnd,hDC);
return TRUE;
}
break;
}   回復(fù)  更多評(píng)論   

# re: 如何更改屬性頁向?qū)ы摰淖煮w 2008-08-19 16:41 勤奮的人

你好 用了你的方法可以實(shí)現(xiàn)更改字體了;
但是出現(xiàn)了新的問題
就是編輯框沒辦法輸入中文了;都是亂碼
請(qǐng)問這個(gè)能解決嗎?  回復(fù)  更多評(píng)論   

# re: 如何更改屬性頁向?qū)ы摰淖煮w 2008-08-19 16:50 浪跡天涯

我試了,我這是可以輸入中文,而且顯示也不是亂碼的。  回復(fù)  更多評(píng)論   

# re: 如何更改屬性頁向?qū)ы摰淖煮w 2008-08-19 18:19 勤奮的人

終于找到什么原因了 我做的是PROE二次開發(fā) 不知道為什么 創(chuàng)建的非模式對(duì)話框里 用編輯框或者組合框鍵盤輸入 中文 總是顯示亂碼 創(chuàng)建的模式對(duì)話框就不會(huì)!還在摸索中! 不過仍然很感謝你! 我才知道不是程序問題!  回復(fù)  更多評(píng)論   

# re: 如何更改屬性頁向?qū)ы摰淖煮w 2008-08-19 18:26 浪跡天涯

呵,客氣!
輸入中文亂碼的問題,有可能是和字符集設(shè)置有關(guān),具體原因我也沒碰見過。  回復(fù)  更多評(píng)論   

# re: 如何更改屬性頁向?qū)ы摰淖煮w 2008-09-13 11:24 RSW

按照上面的方法,無法修改某些窗口的大小(比如,文本框),有時(shí)還感覺它變小了,而且對(duì)于靜態(tài)文本框文字輸入很多的話,有部分不能顯示。
不知道有沒有解決辦法  回復(fù)  更多評(píng)論   

# re: 如何更改屬性頁向?qū)ы摰淖煮w 2008-09-13 12:01 RSW

我把窗口調(diào)小一點(diǎn),窗口就可以完整顯示了。^_^
調(diào)大了好像部分被什么東西遮擋了。
  回復(fù)  更多評(píng)論   

# re: 如何更改屬性頁向?qū)ы摰淖煮w 2008-09-16 09:18 浪跡天涯

這可能是你屬性頁顯示范圍太小,調(diào)大顯示范圍即可!  回復(fù)  更多評(píng)論   

<2008年1月>
303112345
6789101112
13141516171819
20212223242526
272829303112
3456789

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

留言簿(22)

隨筆分類(30)

隨筆檔案(29)

文章分類

搜索

積分與排名

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲开发第一视频在线播放| 久久久久综合网| 你懂的视频欧美| 国产一区二区在线观看免费| 在线看片成人| 欧美大片在线观看一区二区| 欧美一区在线直播| 亚洲茄子视频| 欧美韩日一区二区三区| 久久嫩草精品久久久精品| 国产精品欧美久久| 亚洲在线观看免费| 亚洲人成人99网站| 欧美mv日韩mv国产网站app| 激情视频一区二区三区| 久久精品水蜜桃av综合天堂| 亚洲欧洲av一区二区三区久久| 在线电影院国产精品| 亚洲伦理在线| 欧美日韩免费观看一区二区三区| 亚洲一区二区在线观看视频| 亚洲欧美视频| 狠狠久久亚洲欧美| 亚洲人成人一区二区三区| 欧美视频一区二区三区四区 | 免费成人黄色片| 国内一区二区在线视频观看 | 欧美吻胸吃奶大尺度电影| 亚洲网站视频福利| 欧美视频一区二区三区在线观看 | 久久久久久久久一区二区| 欧美 日韩 国产精品免费观看| 亚洲乱码国产乱码精品精98午夜| 久久精品亚洲精品国产欧美kt∨| 亚洲欧洲精品一区二区三区 | 欧美中文字幕在线播放| 欧美影院久久久| 亚洲黄网站在线观看| 99在线热播精品免费99热| 国产日韩三区| 亚洲大片在线| 国产午夜精品久久久久久免费视| 久久精品网址| 欧美日韩一区二区国产| 久久综合九色综合欧美就去吻 | 欧美亚洲视频在线观看| 在线观看欧美成人| 亚洲一区观看| 一区二区三区高清视频在线观看 | 国产精品国产三级国产专播品爱网 | 久久av红桃一区二区小说| 一区二区三区日韩| 久久精品女人| 欧美中文在线观看国产| 欧美日韩一卡| 亚洲国产裸拍裸体视频在线观看乱了| 国产欧美日韩在线播放| 99re热这里只有精品视频| 亚洲福利视频一区| 欧美中文在线视频| 午夜精品999| 欧美日韩在线观看一区二区三区| 欧美国产日本韩| 一区在线影院| 久久国产精品一区二区三区| 性亚洲最疯狂xxxx高清| 免费观看日韩av| 免费久久久一本精品久久区| 国产一区二区三区av电影 | 久久精品视频99| 国产九区一区在线| 一本色道88久久加勒比精品| 亚洲精品三级| 免费一区二区三区| 欧美a级片网| 亚洲缚视频在线观看| 久久精品一区二区三区不卡牛牛| 久久久国产精品一区| 国产欧美一区二区三区沐欲| 欧美亚洲综合网| 久久精品理论片| 激情欧美日韩一区| 久久精品视频免费观看| 嫩草国产精品入口| 亚洲精品视频啊美女在线直播| 欧美国产日韩精品| 亚洲伦理在线观看| 亚洲精品永久免费精品| 欧美久久电影| 亚洲永久免费观看| 欧美国产日韩一区二区在线观看| 欧美大片免费观看在线观看网站推荐 | 免费成人美女女| 亚洲精品影视| 国产亚洲激情| 欧美母乳在线| 久久久国产91| 亚洲午夜视频在线| 欧美大片在线观看一区二区| 亚洲欧美视频在线观看| 亚洲国产高清在线| 国产精品久久久久永久免费观看| 久久久蜜桃精品| 亚洲午夜伦理| 91久久精品视频| 欧美中文字幕在线| 亚洲一区二区3| 亚洲高清中文字幕| 国产欧美精品| 欧美午夜精品久久久久久人妖| 久久这里有精品15一区二区三区| 亚洲图片激情小说| 亚洲国产精品一区二区尤物区| 久久国产加勒比精品无码| 一本大道久久a久久精二百| 伊人夜夜躁av伊人久久| 国产精品综合色区在线观看| 欧美精品一卡| 欧美不卡视频一区发布| 久久精品国产免费看久久精品| 亚洲一区三区视频在线观看| 日韩一二三区视频| 亚洲精品1区2区| 欧美二区在线| 免费在线看一区| 模特精品在线| 欧美成人精品h版在线观看| 久久久高清一区二区三区| 性欧美暴力猛交另类hd| 亚洲一区久久| 亚洲综合精品四区| 亚洲一区免费视频| 亚洲午夜av| 亚洲在线视频| 亚洲专区在线视频| 亚洲一区二区免费看| 亚洲天堂网在线观看| 亚洲午夜电影| 亚洲欧美在线一区二区| 性久久久久久久久| 新狼窝色av性久久久久久| 欧美在线日韩精品| 久久久久久夜精品精品免费| 久久久精品欧美丰满| 久久先锋资源| 欧美激情乱人伦| 日韩午夜高潮| 亚洲欧美日韩在线高清直播| 性欧美长视频| 久久综合色一综合色88| 欧美电影免费观看| 欧美日韩国产一区精品一区| 国产精品ⅴa在线观看h| 国产精品无码专区在线观看| 国产主播喷水一区二区| 影音先锋日韩资源| 日韩午夜中文字幕| 亚洲欧美视频在线观看| 久久久久国产精品一区二区| 欧美成人自拍| 一区二区欧美日韩| 亚洲欧洲99久久| 免费黄网站欧美| 欧美三级网址| 国内一区二区三区| 日韩西西人体444www| 欧美一进一出视频| 欧美岛国在线观看| 亚洲视频国产视频| 可以看av的网站久久看| 欧美日韩综合视频网址| 国外成人在线| 在线一区二区三区做爰视频网站| 欧美激情综合亚洲一二区| 国产精品国产三级国产aⅴ入口 | 国产欧美一区二区视频| 亚洲国产成人在线视频| 亚洲一区三区电影在线观看| 另类激情亚洲| 日韩一级黄色大片| 久久久久久久97| 国产精品第一区| 91久久久久久久久| 久久久久久伊人| 亚洲调教视频在线观看| 欧美电影资源| 一区二区在线观看视频| 亚洲主播在线播放| 亚洲国产精品毛片| 久久精品女人天堂| 国产精品一区二区三区观看| 亚洲另类在线一区| 欧美~级网站不卡| 亚洲欧美日韩在线综合| 欧美日韩亚洲一区二| 亚洲福利久久| 久久先锋资源| 欧美资源在线| 国产午夜精品在线| 亚洲综合视频一区|