| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 620 人关注过本帖
标题:【求助】MFC中消息过程的问题
只看楼主 加入收藏
gpp6025
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2010-7-8
结帖率:84.62%
收藏
已结贴  问题点数:20 回复次数:4 
【求助】MFC中消息过程的问题
把所有代码都贴一下吧,有几个问题,路过的大侠有空的大牛们,都帮帮忙吧~~,小弟在此先谢谢了~~
#include "stdafx.h"
#include "stdio.h"
LRESULT CALLBACK MyWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
    const char* szTitle = "test";
    const char* szWindowClass = "testWindowClass";
    WNDCLASSEX wcex;
    wcex.cbSize            = sizeof(WNDCLASSEX);
    wcex.style            = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = (WNDPROC)MyWndProc;
    wcex.cbClsExtra        = 0;
    wcex.cbWndExtra        = 0;
    wcex.hInstance        = hInstance;
    wcex.hIcon            = LoadIcon(NULL, IDI_APPLICATION);
    wcex.hCursor        = LoadCursor(NULL, IDC_CROSS);
    wcex.hbrBackground    = (HBRUSH)::GetStockObject(WHITE_BRUSH);
    wcex.lpszMenuName    = NULL;
    wcex.lpszClassName    = szWindowClass;
    wcex.hIconSm        = LoadIcon(NULL, IDI_APPLICATION);
    RegisterClassEx(&wcex);
    HWND hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,CW_USEDEFAULT,300,200, NULL, NULL, hInstance, NULL);
    if (!hWnd)
    {
        return FALSE;
    }
    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);
    MSG msg;
    while (1)
    {
        if()//判断是否在当前窗口内,问题一
        {
            if(mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0))/*判断鼠标动作是否左击,问题二*/
            {
                msg.message="WM_ONCLICK";/*填充消息ID为左击,问题三 */
                TranslateMessage(&msg);
                DispatchMessage(&msg);/*调度一个消息进入窗口过程*/
            }
        }
    }
    return msg.wParam;
}
LRESULT CALLBACK MyWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC hDC;
    switch (message)
    {
    case WM_ONCLICK:
        ::MessageBox(NULL,"test","test",MB_OK);

    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}
问题一:这个不知道要怎么写判断,是从坐标上还是句柄上,应该是句柄吧?
问题二:msdn上找了N久的鼠标函数就貌似找道这个看的懂点,但是问题是返回是空,而且还是个鼠标模拟函数,也就这里填下吧,所以在这里肯定要改了,所以求个捕捉鼠标动作函数吧(用鼠标hook吗?)。
问题三:消息ID 是个uint结构数据类型,但是这个消息ID是我自己定义的而且还是字符,这里赋值不知道怎么搞,如果强转之后,传递到窗口过程中消息ID,case WM_ONCLICK的值不就不一样了吗?


[ 本帖最后由 gpp6025 于 2010-7-10 12:43 编辑 ]
搜索更多相关主题的帖子: MFC 
2010-07-10 12:38
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:0 
感觉很混乱啊。虽然不用MFC的说。但感觉这绝不是MFC的做法。
问题一:消息队列是基于线程的,窗口是线程创建的。所以不需要判断。
问题二:鼠标事件捕获应该在窗口回调函数中进行,而不是在获取消息队列循环中。
问题三:消息ID是个unsigned int而不是什莫字符。

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2010-07-10 17:10
gpp6025
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2010-7-8
收藏
得分:0 
回复 2楼 东海一鱼
,多谢~~
就是对于第三点我的意思就是说我自定义的消息是个字符,而这个消息ID 是 uint的就是你说的unsigned int 型,我的意思就是不知道怎么去自定义这个消息~~~
2010-07-10 21:06
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:20 
消息ID必须是个UINT
自定义消息必须大于 WM_USER,可以定义为  WM_USER + xxxx这种形式。低于WM_USER的消息为系统保留消息定义区。

至于消息的含义,你可以通过WPARAM或LPARAM进行传递。这两个参数都是 void* 类型的。

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2010-07-10 21:34
gpp6025
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2010-7-8
收藏
得分:0 
回复 4楼 东海一鱼
,谢咯~~
2010-07-11 09:30
快速回复:【求助】MFC中消息过程的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033908 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved