Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 7 网格控件:在Visual Studio 2008的Windows XP上运行时出错_Windows 7_Windows Xp_Grid_Controls - Fatal编程技术网

Windows 7 网格控件:在Visual Studio 2008的Windows 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

操作系统:Windows 7 32位 开发工具:VisualStudio2008

问题: 在Windows7上运行时没有问题,但在XP上,调试模式下有断言错误,发布模式下有不可见的网格控制错误。(如下图所示)

情况:

  • 我用于该程序的网格控制类是从下载的。(我想我无法在stackoverflow中上载文件?如果需要,请告诉我。)

  • 我曾经在VS6.0中使用过这个类。这是我第一次在VS9.0中使用它。在VS6.0中使用它时没有错误

  • 在Windows7和XP中编译程序时没有编译错误

  • 在Windows7上,它在调试和发布模式下都运行良好

  • 在Windows XP上,在调试文件夹中运行exe文件会出现断言错误。当我在发布文件夹中运行exe文件时,网格控件不会显示

  • 我还尝试用VisualStudio在XP上编译,看看是否有错误,但它只给出运行时错误

错误:

调试断言失败!节目:。。。 文件:…/gridctrl\u src/gridcell.cpp 电话:228

获取有关您的程序如何运行的信息 可能导致断言失败,请参阅 上的Visual C+文档 断言

下面是错误行中的gridcell.cpp源代码

/////////////////////////////////////////////////////////////////////////////
// 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"));
        }