我在EVC中用WCE MFC AppWizard創建了一個工程,我想通過一個按鈕的BN_CLICKED事件來創建另一個對話框,而在這個對話框界面上可以實現繪畫板的功能,應該是用DialogBox來實現,可是我不知我的程序那裡出錯了,在線請教,謝了!
我的代碼供參考:int ClrRnd;
int nDrawTimes=0;
int bmpNumber=0;
COLORREF wColor=RGB(0,0,0); //white;
int GrayTest;
static int lines = 2;POINT pt_start = {0,0};
LRESULT CALLBACK DlgProc_DrawLine(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
static HWND hTaskBarWnd;
int cx=0,cy=0;
POINT pt_next;
HPEN hPen; switch(message)
{
case WM_INITDIALOG: 
hTaskBarWnd = FindWindow(_T("HHTaskBar"), NULL);    
ShowWindow(hTaskBarWnd, SW_HIDE);
cx = GetSystemMetrics(SM_CXSCREEN);
cy = GetSystemMetrics(SM_CYSCREEN);
MoveWindow(hDlg,0,0,cx,cy,TRUE);
break;
case WM_PAINT:
hdc = BeginPaint(hDlg,&ps);
EndPaint(hDlg,&ps);
break;
case WM_LBUTTONUP:
InvalidateRect (hDlg, NULL, FALSE) ;
break;
case WM_LBUTTONDOWN:
pt_start.x = LOWORD(lParam);pt_start.y = HIWORD(lParam);
InvalidateRect(hDlg,NULL,FALSE);
break;
case WM_MOUSEMOVE:
hdc = GetDC(hDlg);
// SetROP2(hdc,R2_NOT);
hPen = CreatePen(PS_SOLID,3,RGB(0,0,0));
SelectObject(hdc,hPen);
pt_next.x = LOWORD(lParam);pt_next.y = HIWORD(lParam);
MoveToEx(hdc,pt_start.x,pt_start.y,NULL);
LineTo(hdc,pt_next.x,pt_next.y);
pt_start = pt_next;
ReleaseDC(hDlg,hdc);
DeleteObject(hPen);
break;
case WM_KEYUP:
if(wParam == 13)
{
ShowWindow(hTaskBarWnd, SW_SHOW);
EndDialog(hDlg,TRUE);
}
break;
}
return FALSE;
}void CTestDlg::OnButton1() 
{
// TODO: Add your control notification handler code here
HINSTANCE instance;
HWND hwnd;
    DialogBox(instance,(LPCTSTR)IDD_Dlg, 
hwnd, (DLGPROC)DlgProc_DrawLine);
}

解决方案 »

  1.   

    BOOL CALLBACK DlgProc_DrawLine(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)把回调函数返回值类型改了试试看
      

  2.   

    還是不行,我覺得是那兩個參數的問題,只是我不知這兩個參數倒底應該是什么?
    void CTestDlg::OnButton1() 
    {
    // TODO: Add your control notification handler code here
    //下面定義的這兩個參數有問題的,應該是某一個window或instance的句柄
    HINSTANCE instance;
    HWND hwnd;
        DialogBox(instance,(LPCTSTR)IDD_Dlg, 
    hwnd, (DLGPROC)DlgProc_DrawLine);
    }
      

  3.   

    HINSTANCE instance;
    instance = AfxGetInstanceHandle ();
    HWND hwnd;hwnd = this->GetSafeHwnd();
      

  4.   

    可以的,
    BOOL CALLBACK DlgProc_DrawLine(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)把 DialogBox(instance,(LPCTSTR)IDD_Dlg, 
    hwnd, (DLGPROC)DlgProc_DrawLine);
    改为DialogBox(instance,MAKEINTRESOURECE(IDD_Dlg),hwnd, DlgProc_DrawLine);
      

  5.   

    To iambilin2008_ren() :
    用你的方法還是行不通啊,可能我那裡用錯了吧,出現這樣的錯誤:error C2065: 'MAKEINTRESOURECE' : undeclared identifier
    可幫我再解釋一下嗎?謝過!
      

  6.   

    MAKEINTRESOURECE'写错了,应该是MAKEINTRESOURCE
      

  7.   

    啊,原來都了個E,怎麼我也沒有注意到這個問題呢
    好了,問題解決,該結了
    不過我用毛毛的方法試了,同樣OK
    好,給你們兩 位加分
    謝謝幫助!!!