如何处理警告C4191:'输入' :来自' int的不安全转换(__cdecl CWnd :: *)(LPCREATESTRUCT)'到#AFX_PMSGW'

时间:2018-02-21 01:47:15

标签: c++ mfc warnings

我的解决方案是用MFC(C ++)编写的,可以从VC6迁移。我还需要支持64位计算机。

现在我的MainForm中有一个警告,它位于MainForm.cpp

BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
    ON_WM_CREATE() //C4191 warning
END_MESSAGE_MAP()
  

C4191:'输入' :来自' int的不安全转换(__cdecl CWnd :: *)(LPCREATESTRUCT)'到' AFX_PMSGW'

我深入研究ON_WM_CREATE(),我认为这个代码是由项目自动生成的。它们位于afxmsg_.h

之下
#define ON_WM_CREATE() \
    { WM_CREATE, 0, 0, 0, AfxSig_is, \
        (AFX_PMSG) (AFX_PMSGW) \
        (static_cast< int (AFX_MSG_CALL CWnd::*)(LPCREATESTRUCT) > ( &ThisClass :: OnCreate)) },

我认为我不应该修改此代码,但如何修复此警告?

顺便说一下,当我尝试在我的代码上添加CWnd :: OnCtlColor时,我遇到了同样的警告。以下是情况。

在MyDlg.cpp

BEGIN_MESSAGE_MAP(CDlgSOProgram, CPropertyPage)
    ON_WM_CTLCOLOR() //add message map entry,C4191 warning
END_MESSAGE_MAP()

//function to handle STATIC control color change
HBRUSH MyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    auto hBrush = CPropertyPage::OnCtlColor(pDC, pWnd, nCtlColor);

    if (
        nCtlColor == CTLCOLOR_STATIC
        && pWnd->GetDlgCtrlID() == IDC_PS_CONNECTION_STATUS    
       )
    {
        if (this->m_bConnectError) {
            // Sets the font color as red when connection is failed.
            pDC->SetTextColor(RGB(255, 0, 0));
        }
        else {
            // Sets the font color as blue in all other scenarios.
            pDC->SetTextColor(RGB(0, 0, 255));
        }
    }

    return hBrush;  
}

上面的代码也会收到警告C4191。

警告C4191:&#39;输入&#39; :HBRUSH的不安全转换(__cdecl CWnd :: *)(CDC *,CWnd *,UINT)&#39;到&#39; AFX_PMSGW&#39;

有没有人知道如何修复它?

0 个答案:

没有答案