zoukankan      html  css  js  c++  java
  • Win32 Msg

    winmain.cpp:入口函数 AfxWinMain 的实现;

    cmdtarg.cpp:类CCmdTarget的实现;

    wincore.cpp:类CWnd;doccore.cpp:类CDocument;thrdcore.cpp:类CWinThread;appcore.cpp:类CWinApp; ===>继承自 CCmdTarget

    winfrm.cpp:类CFrameWnd;viewcore.cpp:类CView;dlgcore.cpp:类CDialog;===>继承自 CWnd


    //
    //* Windows提供了许多内核对象来实现线程的同步。对于线程同步而言,这些内核对象有两个非常重要的状态:“已通知”状态,“未通知”状态(也有翻译为:受信状态,未受信状态。)
    //* Windows提供了几种内核对象可以处于已通知状态和未通知状态:进程、线程、作业、文件、控制台输入/输出/错误流、事件、等待定时器、信号量、互斥对象。
    //

    /*
    *函数功能:该函数需要传递一个内核对象句柄,该句柄标识一个内核对象,如果该内核对象处于未通知状态,则该函数导致线程进入阻塞状态;
    *返 回 值:如果该内核对象处于已通知状态,则该函数立即返回WAIT_OBJECT_0。
    *参 数:第二个参数指明了需要等待的时间(毫秒),可以传递INFINITE指明要无限期等待下去,如果第二个参数为0,那么函数就测试同步对象的状态并立即返回。
    *返 回 值:如果等待超时,该函数返回WAIT_TIMEOUT。如果该函数失败,返回WAIT_FAILED。
    */
    DWORD WaitForSingleObject(
    HANDLE hHandle, // 指明一个内核对象的句柄
    DWORD dwMillisenconds // 等待时间
    );

    /*
    *参 数:该函数的第一个参数指明等待的内核对象的个数,可以是0到MAXIMUM_WAIT_OBJECTS(64)中的一个值。
    lpHandles参数是一个存放等待的内核对象句柄的数组。
    bWaitAll参数如果为TRUE,则只有当等待的所有内核对象为已通知状态时函数才返回,如果为FALSE,则只要一个内核对象为已通知状态,则该函数返回。
    第四个参数和WaitForSingleObject中的dwMilliseconds参数类似。
    *返 回 值:该函数失败,返回WAIT_FAILED;如果超时,返回WAIT_TIMEOUT;
    *备 注:如果bWaitAll参数为TRUE,函数成功则返回WAIT_OBJECT_0,如果bWaitAll为FALSE,函数成功则返回值指明是哪个内核对象收到通知。
    */
    DWORD WaitForMultipleObjects(
    DWORD nCount, // 等待的内核对象个数
    CONST HANDLE *lpHandles, // 一个存放被等待的内核对象句柄的数组
    BOOL bWaitAll, // 是否等到所有内核对象都为以通知状态后才返回
    DWORD dwMilliseconds // 等待时间
    );

    /*
    *函数功能:阻塞时仍可以响应消息
    *备 注:MsgWaitForMultipleObjects()函数类似WaitForMultipleObjects(),但它会在“对象被激发”或“消息到达队列”时被唤醒而返回。
    *参 数:MsgWaitForMultipleObjects()多接收一个参数,允许指定哪些消息是观察对象。
    */
    DWORD MsgWaitForMultipleObjects(
    DWORD nCount, // 等待的内核对象个数
    CONST HANDLE *pHandles, // 指向一个由handle组成的数组,这些handle的类型可以不同
    BOOL fWaitAll, // 是否等待所有的handles被激发才返回
    DWORD dwMilliseconds, // 超时时间
    DWORD dwWakeMask // 欲观察的用户输入消息类型
    );

    /*
    *特 点:你也可以同时通知一个内核对象,同时等待另一个内核对象,这两个操作以原子的方式进行;
    *函数功能:该函数在内部使得hObjectToSignal参数所指明的内核对象变成已通知状态,同时等待hObjectToWaitOn参数所代表的内核对象。
    *参 数:dwMilliseconds参数的用法与WaitForSingleObject函数类似。
    *返 回 值:该函数返回如下:WAIT_OBJECT_0,WAIT_TIMEOUT,WAIT_FAILED,WAIT_IO_COMPLETION。
    */
    DWORD SignalObjectAndWait(
    HANDLE hObjectToSignal, // 通知的内核对象
    HANDLE hObjectToWaitOn, // 等待的内核对象
    DWORD dwMilliseconds, // 等待的时间
    BOOL bAlertable // 与IO完成端口有关的参数
    );

    // 消息结构
    typedef struct tagMSG {
    HWND hwnd;
    UINT message;
    WPARAM wParam;
    LPARAM lParam;
    DWORD time;
    POINT pt;
    #ifdef _MAC
    DWORD lPrivate;
    #endif
    } MSG, *PMSG, NEAR *NPMSG, FAR *LPMSG;

    /*
    *函数功能:将虚拟键消息转换为字符消息。字符消息被送到调用线程的消息队列中,在下一次线程调用函数GetMessage或PeekMessage时被读出。
    *返 回 值:
    如果消息被转换(即,字符消息被送到线程的消息队列中),返回非零值。
    如果消息是 WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, 或 WM_SYSKEYUP,返回非零值,不考虑转换。
    如果消息没有转换(即,字符消息没被送到线程的消息队列中),返回值是零。
    *备 注:TranslateMessage函数不修改由参数lpMsg指向的消息。
    消息WM_KEYDOWN和WM_KEYUP组合产生一个WM_CHAR或WM_DEADCHAR消息。消息WM_SYSKEYDOWN和WM_SYSKEYUP组合产生一个WM_SYSCHAR或 WM_SYSDEADCHAR 消息。
    TtanslateMessage仅为那些由键盘驱动器映射为ASCII字符的键产生WM_CHAR消息。
    如果应用程序为其它用途而处理虚拟键消息,不应调用TranslateMessage函数。例如,如果TranslateAccelerator函数返回一个非零值,则应用程序将不调用TranslateMessage函数。
    Windows CE:Windows CE不支持扫描码或扩展键标志,因此,它不支持由TranslateMessage函数产生的WM_CHAR消息中的lKeyData参数(lParam)16-24的取值。
    TranslateMessage函数只能用于转换由GetMessage或PeekMessage函数接收到的消息。
    */
    BOOL TranslateMessage(
    CONST MSG *lpMsg // 指向一个含有用GetMessage或PeekMessage函数从调用线程的消息队列中取得消息信息的MSG结构的指针。
    );

    /*
    *函数功能:该函数调度一个消息给窗口程序。通常调度从GetMessage取得的消息。消息被调度到的窗口程序即是MainProc()函数。
    *返 回 值:返回值是窗口程序返回的值。尽管返回值的含义依赖于被调度的消息,但返回值通常被忽略。
    *备 注:MSG结构必须包含有效的消息值。如果参数lpmsg指向一个WM_TIMER消息,并且WM_TIMER消息的参数IParam不为NULL,则调用IPa1ram指向的函数,而不是调用窗口程序。
    */
    LRESULT DispatchMessage(
    CONST MSG *lpMsg // 指向含有消息的MSG结构的指针
    );

    /**/
    BOOL GetMessage(
    LPMSG lpMsg,
    HWND hWnd,
    UINT wMsgFilterMin,
    UINT wMsgFilterMax
    );

    /**/
    BOOL PeekMessage(
    LPMSG lpMsg,
    HWND hWnd,
    UINT wMsgFilterMin,
    UINT wMsgFilterMax,
    UINT wRemoveMsg
    );

    /**/
    BOOL PostMessage(
    HWND hWnd,
    UINT Msg,
    WPARAM wParam,
    LPARAM lParam
    );

    /**/
    BOOL PostThreadMessage(
    DWORD idThread,
    UINT Msg,
    WPARAM wParam,
    LPARAM lParam
    );

    /**/
    BOOL SendMessage(
    HWND hWnd,
    UINT Msg,
    WPARAM wParam,
    LPARAM lParam
    );

    /**/
    BOOL SendNotifyMessage(
    HWND hWnd,
    UINT Msg,
    WPARAM wParam,
    LPARAM lParam
    );

    /**/
    LRESULT SendMessageTimeout(
    HWND hWnd,
    UINT Msg,
    WPARAM wParam,
    LPARAM lParam,
    UINT fuFlags,
    UINT uTimeout,
    PDWORD_PTR lpdwResult
    );

  • 相关阅读:
    Spinner用法与ListView用法
    ViewPager实现选项卡功能
    android:layout_weight的真实含义
    vb和vb.net事件机制
    go
    挨踢江湖之十一
    蓝桥杯-地铁换乘
    【Android LibGDX游戏引擎开发教程】第06期:图形图像的绘制(下)图片整合工具的使用
    Eclipse3.6 添加JUnit源代码
    【分享】如何使用sublime代码片段快速输入PHP头部版本声明
  • 原文地址:https://www.cnblogs.com/shuang0109/p/9828986.html
Copyright © 2011-2022 走看看