2011-04-27 94 views
0

操作系統:Windows 7 32位 的深化發展工具:Visual Studio 2008的網格控制:當在Windows XP中的Visual Studio運行運行時錯誤2008

問題: 當在Windows 7中運行它是確定的,但在XP有DEBUG模式下的斷言錯誤,RELEASE模式下的無形網格控制錯誤。 (就像你可以看到如下圖)

現狀:

  • 網格控件類,我用的程序,從code-project被下載。 (我想我不能上傳計算器中的文件嗎?如果你需要它,PLZ告訴我。)

  • 我以前在VS 6.0使用這個類。這是我第一次在VS 9.0中使用它。當我在VS 6.0中使用它時沒有錯誤。

  • 沒有編譯錯誤,當我編譯Windows 7和XP程序。

  • 在Windows 7中,以及在兩種調試和發佈模式下運行。

  • 在Windows XP中,在DEBUG文件夾運行exe文件給出了一個斷言錯誤。當我在RELEASE文件夾中運行exe文件時,網格控件不顯示。

  • 而且我也試圖編譯在XP與Visual Studio,看看是否有任何錯誤,但只給出了運行時錯誤。

錯誤:

調試斷言失敗!程序:... 文件:.../gridctrl_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 
} 

預先感謝您!

回答

0

回答我的問題...

SystemParametersInfo(SPI_GETNONCLIENTMETRICS,...)問題

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

良好局面的研究 – 2011-04-29 03:10:33

1

我遇到了同樣的問題與CGridCtrl而從移植到VC6一個VS2012項目。

在項目設置_WIN32_WINNT到你希望你的應用程序支持的最低目標平臺。對於XP SP1,這是0x0501CGridDefaultCell應該不需要更改代碼。

Related discussion MSDN上

相關問題