日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

SystemParametersInfo (SPI_GETNONCLIENTMETRICS... 在VC 2008 里不能正常工作

發(fā)布時間:2023/12/15 c/c++ 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SystemParametersInfo (SPI_GETNONCLIENTMETRICS... 在VC 2008 里不能正常工作 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在codeproject上面看見一個顏色選擇控件CColourPopup, 地址是?? http://www.codeproject.com/Articles/713/A-color-picker-button?

這里控件看到很多人再用, 但是在這個函數(shù)里面有點小問題

void CColourPopup::Initialise() {//other code// Create the fontNONCLIENTMETRICS ncm;ncm.cbSize = sizeof(NONCLIENTMETRICS);VERIFY(SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0));m_Font.CreateFontIndirect(&(ncm.lfMessageFont));//other code}
上面這段代碼在VC 6.0 中工作正常,但是在VC2008 + XP系統(tǒng)里面 ?SystemParametersInfo 返回 0, 因為VS2008默認(rèn)你是面向Vista開發(fā)的軟件, ?GetLastError 返回的是 0

簡單訂正如下:

void CColourPopup::Initialise() {//other code// Create the fontUINT size;NONCLIENTMETRICS ncm;ncm.cbSize = sizeof(NONCLIENTMETRICS);OSVERSIONINFO osv;osv.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);::GetVersionEx(&osv);if(osv.dwMajorVersion < 6) //Vista以下的Windowsncm.cbSize = sizeof(NONCLIENTMETRICS) - sizeof(ncm.iPaddedBorderWidth);size = ncm.cbSize;VERIFY(SystemParametersInfo(SPI_GETNONCLIENTMETRICS, size, &ncm, 0));m_Font.CreateFontIndirect(&(ncm.lfMessageFont));//other code}

實際是由于從 Vista 和 Windows Server 2008 開始 NONCLIENTMETRICS 在最后增加了iPaddedBorderWidth字段,如果你的程序打算同時支持 vista 或 XP ,Windows 2000, Windows Server 2003,那么應(yīng)該先調(diào)用 GetVersionEx 檢測Windows版本,然后決定是否需要減去 sizeof (ncms.iPaddedBorderWidth) ;


=====================================================================

NONCLIENTMETRICS 定義如下

typedef struct tagNONCLIENTMETRICSW {UINT cbSize;int iBorderWidth;int iScrollWidth;int iScrollHeight;int iCaptionWidth;int iCaptionHeight;LOGFONTW lfCaptionFont;int iSmCaptionWidth;int iSmCaptionHeight;LOGFONTW lfSmCaptionFont;int iMenuWidth;int iMenuHeight;LOGFONTW lfMenuFont;LOGFONTW lfStatusFont;LOGFONTW lfMessageFont; #if(WINVER >= 0x0600)int iPaddedBorderWidth; #endif /* WINVER >= 0x0600 */ } NONCLIENTMETRICSW, *PNONCLIENTMETRICSW, FAR* LPNONCLIENTMETRICSW;



總結(jié)

以上是生活随笔為你收集整理的SystemParametersInfo (SPI_GETNONCLIENTMETRICS... 在VC 2008 里不能正常工作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。