从一个类发送消息到另一个类的问题。 MFC计划

时间:2014-01-19 08:49:58

标签: c++ mfc

这是我的代码: 当我单击鼠标左键并发送消息时调用此函数:

#define WM_MYMESSAGE WM_USER+7
void CChildView::OnLButtonDown(UINT nFlags, CPoint point)
{


     counter=0;
    CWnd::OnLButtonDown(nFlags, point);
    CRect wdRect;
    GetClientRect(&wdRect);
    HWND hwnd;
    hwnd=::FindWindow(NULL,"Client");
    if(wdRect.PtInRect(point))
    {
        counter++;

        PostMessage(WM_MYMESSAGE,point.x,point.y);
    }
}

在另一个文件Mainfraim.cpp中,在ON_MESSAGE(WM_MYMESSAGE,OnNameMsg)的帮助下,我向ONNameMsg函数发送消息。该函数打开bmp文件。问题是OnNameMsg函数没有响应消息,这个函数不起作用。我应该怎么做才能使此功能响应此消息。你能帮我解决这个问题吗?这是代码。

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
    ON_WM_CREATE()
    ON_WM_SETFOCUS()
    ON_MESSAGE(WM_MYMESSAGE, OnNameMsg)
    ON_COMMAND(ID_EDIT_LINE, OnEditLine)



END_MESSAGE_MAP()


afx_msg LRESULT CMainFrame::OnNameMsg(WPARAM wParam,LPARAM IParam)
{

    MSG msg;
    char FileName[500];
char FileTitle[100];
FileName[0]='\0'; 
GetMessage(&msg,NULL,WM_MOUSEFIRST,0);

CFileDialog file(TRUE);

file.m_ofn.lpstrFilter=TEXT("Bitmap picture files *.bmp\0*.bmp\0All Files *.*\0*.*\0\0");
file.m_ofn.lpstrFileTitle=FileTitle;
file.m_ofn.lpstrFile=FileName;
file.m_ofn.lpstrTitle="Open BMP File";

file.DoModal(); 

//if (FileName[0]=='\0')return;

SetWindowText(FileTitle); 

HANDLE hdibCurrent1 = OpenDIB(FileName);
hbm=0; 

hbm=BitmapFromDib(hdibCurrent1,0); 

GetObject(hbm,sizeof(BITMAP),(LPSTR)&bm); 

CRect wdRect;

GetClientRect(&wdRect);
ClientToScreen(&wdRect); 

    int j=wdRect.Height();
    int i=wdRect.Width();
    //SetWindowPos(NULL,wdRect.left,wdRect.top, i,j,NULL); 



    if(hbm) { CClientDC dc(this); 

        HDC hdc=::GetDC(m_hWnd);
        HDC hdcBits=::CreateCompatibleDC(hdc); 

        SelectObject(hdcBits,hbm); 

        //CRect wdRect;

        GetClientRect(&wdRect);
        CBrush brush;
        brush.CreateSolidBrush(RGB(0,0,0));
        dc.FillRect(&wdRect,&brush); 

        BitBlt(hdc, 0, 0, bm.bmWidth,bm.bmHeight,hdcBits,0,0, SRCCOPY); 

        DeleteDC(hdcBits);
        ::ReleaseDC(m_hWnd,hdc);
    } 


    return 1;

}

1 个答案:

答案 0 :(得分:0)

您要将邮件发送至CChildView,而不是CMainFrame。由于您要将消息发送到主框架并在那里处理,您必须将(PostMessage)发送到主框架的窗口句柄。

您调用的PostMessage方法来自CWnd,与::PostMessage API不同,因此它发送到this。你需要一个CMainFrame的指针,并通过该指针调用。我们假设您将主框架的指针指向pMainFrame,然后您可以调用:

pMainFrame->PostMessage(WM_MYMESSAGE,point.x,point.y);