Windows 7 网格控件:在Visual Studio 2008的Windows XP上运行时出错
操作系统:Windows 7 32位 开发工具:VisualStudio2008 问题: 在Windows7上运行时没有问题,但在XP上,调试模式下有断言错误,发布模式下有不可见的网格控制错误。(如下图所示) 情况:Windows 7 网格控件:在Visual Studio 2008的Windows XP上运行时出错,windows-7,windows-xp,grid,controls,Windows 7,Windows Xp,Grid,Controls,操作系统:Windows 7 32位 开发工具:VisualStudio2008 问题: 在Windows7上运行时没有问题,但在XP上,调试模式下有断言错误,发布模式下有不可见的网格控制错误。(如下图所示) 情况: 我用于该程序的网格控制类是从下载的。(我想我无法在stackoverflow中上载文件?如果需要,请告诉我。) 我曾经在VS6.0中使用过这个类。这是我第一次在VS9.0中使用它。在VS6.0中使用它时没有错误 在Windows7和XP中编译程序时没有编译错误 在Windows7
- 我用于该程序的网格控制类是从下载的。(我想我无法在stackoverflow中上载文件?如果需要,请告诉我。)
- 我曾经在VS6.0中使用过这个类。这是我第一次在VS9.0中使用它。在VS6.0中使用它时没有错误
- 在Windows7和XP中编译程序时没有编译错误
- 在Windows7上,它在调试和发布模式下都运行良好
- 在Windows XP上,在调试文件夹中运行exe文件会出现断言错误。当我在发布文件夹中运行exe文件时,网格控件不会显示
- 我还尝试用VisualStudio在XP上编译,看看是否有错误,但它只给出运行时错误
/////////////////////////////////////////////////////////////////////////////
// CGridDefaultCell
CGridDefaultCell::CGridDefaultCell()
{
#ifdef _WIN32_WCE
m_nFormat = DT_LEFT|DT_VCENTER|DT_SINGLELINE|DT_NOPREFIX;
#else
m_nFormat = DT_LEFT|DT_VCENTER|DT_SINGLELINE|DT_NOPREFIX | DT_END_ELLIPSIS;
#endif
m_crFgClr = CLR_DEFAULT;
m_crBkClr = CLR_DEFAULT;
m_Size = CSize(30,10);
m_dwStyle = 0;
#ifdef _WIN32_WCE
LOGFONT lf;
GetObject(GetStockObject(SYSTEM_FONT), sizeof(LOGFONT), &lf);
SetFont(&lf);
#else // not CE
NONCLIENTMETRICS ncm;
ncm.cbSize = sizeof(NONCLIENTMETRICS);
VERIFY(SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0));
SetFont(&(ncm.lfMessageFont));
#endif
}
提前谢谢你 回答我自己的问题 系统参数信息(SPI_GETNONCLIENTMETRICS…)问题
//最初使用系统消息字体作为GridCtrl字体
非客户计量ncm;
memset(&ncm,0,sizeof(NONCLIENTMETRICS));
ncm.cbSize=sizeof(非客户端度量);
#如果(WINVER>=0x0600)
ncm.cbSize-=4// 在将项目从VC6移植到VS2012时,我遇到了与CGridCtrl相同的问题
在项目中,将\u WIN32\u WINNT
设置为希望应用程序支持的最低目标平台。这是xpsp1的0x0501
。
CGridDefaultCell中不需要任何代码更改
关于MSDN
// Initially use the system message font for the GridCtrl font
NONCLIENTMETRICS ncm;
memset(&ncm,0,sizeof(NONCLIENTMETRICS));
ncm.cbSize = sizeof(NONCLIENTMETRICS);
#if (WINVER >= 0x0600)
ncm.cbSize -= 4; //<== ADD HERE!!
#endif
BOOL f = SystemParametersInfo(SPI_GETNONCLIENTMETRICS,sizeof(NONCLIENTMETRICS), &ncm, 0);
VERIFY(f);
if(f){
memcpy (&m_LogFont, &ncm.lfMessageFont, sizeof (LOGFONT));
m_LogFont.lfHeight = -MulDiv (11, dc.GetDeviceCaps (LOGPIXELSY), 72);
m_LogFont.lfWeight = FW_NORMAL;
m_LogFont.lfOutPrecision = OUT_DEFAULT_PRECIS;
m_LogFont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
m_LogFont.lfQuality = DEFAULT_QUALITY;
m_LogFont.lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE;
m_LogFont.lfCharSet = ANSI_CHARSET;
_tcscpy (m_LogFont.lfFaceName, _T ("Courier New"));
}