BOOL NewDialg::Create()
{
return CDialog::Create(IDD_DIALOG1, m_pview);
}
編譯錯誤
error C2664: 'BOOL CDialog::Create(LPCTSTR,CWnd *)' : cannot convert parameter 1 from '' to 'LPCTSTR'
給出CDialog
class CDialog : public CWnd
{
public:
virtual BOOL Create(LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL);
virtual BOOL Create(UINT nIDTemplate, CWnd* pParentWnd = NULL);
}
分析原因是CDialog::Create(IDD_DIALOG1, m_pview);呼叫的是第一個Create,所以引數不對,但是為什么不呼叫第二個Create,我看別人的代碼也是這么寫的。
uj5u.com熱心網友回復:
第二個Create的第一個引數型別UINT是無符號整型的別名typedef unsigned int UINT;
IDD_DIALOG1 是對話框的ID
#define IDD_DIALOG1 310
uj5u.com熱心網友回復:
自己頂一下,麻煩各路大神給看看uj5u.com熱心網友回復:
已過去兩小時。。。uj5u.com熱心網友回復:
在資源編輯框中添加對話框資源, ID修改為 IDD_DIALOG1 , 然后你的代碼就可以用了, 如果已經有資源,那把函式引數中的 IDD_DIALOG1 替換成現有的資源IDuj5u.com熱心網友回復:
已經添加了對話框資源,并且ID就是IDD_DIALOG1
uj5u.com熱心網友回復:
我已經絕望了。。。uj5u.com熱心網友回復:
NewDialg.cpp 中 #include "resource.h" 試試, 可能ID沒有被正常識別uj5u.com熱心網友回復:
return CDialog::Create(MAKEINTRESOURCE(IDD_DIALOG1), m_pview);呢uj5u.com熱心網友回復:
BOOL CAboutDlg::Create()
{
CWnd *pview=0;
return CDialog::Create(IDD_ABOUTBOX,pview);
}
沒有錯 ?
uj5u.com熱心網友回復:
BOOL CAboutDlg::Create()
{
CWnd *pview=AfxGetMainWnd();
return CDialog::Create(IDD_ABOUTBOX,pview);
}
也沒有錯 ?
uj5u.com熱心網友回復:
能確定這個編譯錯誤是return CDialog::Create(IDD_DIALOG1, m_pview);
這一行嗎?
uj5u.com熱心網友回復:
測驗了,首先,采用了MAKEINTRESOURCE,單位的電腦能編譯通過,家里的電腦不行。然后百度了很多資料,有人說visual studio的型別轉換比較嚴格,型別不會默認兼容,需要強制進行型別轉化,
return CDialog::Create((LPCTSTR)IDD_DIALOG1, (CWnd*)m_pview); 此時就編譯通過了。
但是
return CDialog::Create((UINT)IDD_DIALOG1, (CWnd*)m_pview); 還是編譯不通過,也就是說這里還是只呼叫了第一個CDialog::Create(),沒有呼叫第二個,求大神解答,為什么沒有呼叫第二個?怎么才能呼叫第二個?
引申另一個問題,單檔案MFC默認的視圖類CMFCStudyView在客戶區單擊,呼叫非模態對話框NewDialg,m_pdlg是CMFCStudyView的私有成員函式,沒有初始化,
為什么觸發OnLButtonDown后,直接進入了下面的m_pdlg->SetActiveWindow();我都沒有創建m_pdlg,所以運行后,直接崩掉,即使在CMFCStudyView的建構式
初始化為NULL,也是一樣進入m_pdlg->SetActiveWindow(); 最后直接崩掉,
void CMFCStudyView::OnLButtonDown(UINT nFlags, CPoint point)
{
if (m_pdlg!=NULL)
m_pdlg->SetActiveWindow(); //再次單擊,激活對話框
else
{
m_pdlg = new NewDialg(this); //首次單擊創建非模態對話框
m_pdlg->Create();
}
CView::OnLButtonDown(nFlags, point);
}
但是直接創建非模態對話框是可以運行的,為什么?
void CMFCStudyView::OnLButtonDown(UINT nFlags, CPoint point)
{
m_pdlg = new NewDialg(this); //首次單擊創建非模態對話框
m_pdlg->Create();
CView::OnLButtonDown(nFlags, point);
}
uj5u.com熱心網友回復:
9,10,樓是 vc6 。沒有編譯錯的!轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/79675.html
標籤:界面
