SystemParametersInfo (SPI_GETNONCLIENTMETRICS... 在VC 2008 里不能正常工作
生活随笔
收集整理的這篇文章主要介紹了
SystemParametersInfo (SPI_GETNONCLIENTMETRICS... 在VC 2008 里不能正常工作
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在codeproject上面看見一個顏色選擇控件CColourPopup, 地址是??
http://www.codeproject.com/Articles/713/A-color-picker-button?
上面這段代碼在VC 6.0 中工作正常,但是在VC2008 + XP系統(tǒng)里面 ?SystemParametersInfo 返回 0, 因為VS2008默認(rèn)你是面向Vista開發(fā)的軟件, ?GetLastError 返回的是 0
這里控件看到很多人再用, 但是在這個函數(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 定義如下
總結(jié)
以上是生活随笔為你收集整理的SystemParametersInfo (SPI_GETNONCLIENTMETRICS... 在VC 2008 里不能正常工作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大众中国CEO:将在中国市场投放更多款电
- 下一篇: PJ Naughter's Freewa