0
這裏是從這裏 -DialogProc功能要求宣佈它的自我靜態
HRESULT AMEPreviewHandler::CreatePreviewWindow()
{
assert(m_hwndPreview == NULL);
assert(m_hwndParent != NULL);
HRESULT hr = S_OK;
m_hwndPreview = CreateDialogParam(g_hInst,MAKEINTRESOURCE(IDD_MAINDIALOG), m_hwndParent,(DLGPROC)DialogProc, (LPARAM)this); /here the dialog proc function is called
if (m_hwndPreview == NULL)
{
hr = HRESULT_FROM_WIN32(GetLastError());
}
..........
...
}
調用DialogProc功能我createdialogparam功能這裏是DialogProc定義功能 -
BOOL CALLBACK AMEPreviewHandler::DialogProc(HWND m_hwndPreview, UINT Umsg, WPARAM wParam, LPARAM lParam)
{
static RECT m_rcParent ;
switch(Umsg)
{
case WM_INITDIALOG:
{
return 0;
}
break;
........
case WM_COMMAND:
{
int ctl = LOWORD(wParam);
int event = HIWORD(wParam);
if (ctl == IDC_PREVIOUS && event == BN_CLICKED)
{
CreateHtmlPreview(); //it must be static now and it is not able to access the non static vraibles delared globally in the program
return 0;
}
}
}
和聲明像這樣 -
static BOOL CALLBACK DialogProc(HWND hWindow,UINT uMsg,WPARAM wParam,LPARAM lParam); //假設它是靜態的..它是不會放棄任何錯誤,如果靜態的..如果它不聲明爲靜態的提示錯誤
這裏 -
m_hwndPreview = CreateDialogParam(g_hInst,MAKEINTRESOURCE(IDD_MAINDIALOG), m_hwndParent,(DLGPROC)DialogProc, (LPARAM)this); //error C2440: 'type cast' : cannot convert from 'overloaded-function' to 'DLGPROC'
有什麼辦法來訪問全局聲明中的變量靜態的DialogProc,或者可以在dialogproc中訪問全局聲明的變量,而無需將這些變量聲明爲靜態,因爲它們在程序的其他部分也被用作非靜態變量。
你的意思是我需要傳遞m_pStream作爲函數的最後一個參數-m_hwndPreview = CreateDialogParam(...(LPARAM)this);那麼我將能夠訪問它裏面的DialogProc功能 – Sss
發送此爲你,然後使用實例 - > m_pStream與我的回答 – doctorlove
定義的實例,但是當我這樣做AMEPreviewHandler *實例=(AMEPreviewHandler)lParam; \t \t instance-> m_pStream; //我得到一個錯誤錯誤C2440:'type cast':無法從'LPARAM'轉換爲'AMEPreviewHandler' – Sss