我的解决方案是用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;
有没有人知道如何修复它?