我没有这本书,看你的意见也发表一下我的意见:
sendmessage是在消息处理完后返回,不会导致程序不稳定的
主线程就是用户界面线程。

解决方案 »

  1.   

    1 谁说sendmessage直接向winproc发消息?sendmessage是把消息发送到消息队列里面。发给winproc的任务由windows系统完成。并且消息队列有一定的长度,即有一个缓冲的作用。程序并不会因为winproc很忙而变得不稳定。当然,如果winproc很忙,忙到无法继续接受并处理消息,导致消息队列溢出,那有消息丢失的可能,但程序不会变得不稳定。
    2 wm_command不是指具体的消息,而是指一个类型的消息。
    3 你所说的默认对话框函数究竟是什么呀?我没有那本书,因此不能回答这个问题。
    4 什么是ui thread?如果你说的是单线程,那是当然了。主线程当然只有一个,在程序刚开始运行时由windows系统生成。此后的线程一般由该主线程生成并管理。
      

  2.   

    谢谢两位的回答
    1。postmessage才是把消息发到消息队列中的。我查了一下msdn明白了:sendmessage()直到 winproc()执行完毕后才返回的。
    2。wm_command当然是一类消息,但绝对不包括wm_dramitem
    3。...
    4。假如我做了一个后台执行程序,根本就没有用户界面呢?
      

  3.   

    1。如果是线程内部调SendMessage,不会存在线程正忙的情况;如果是其他线程调,这时Windows进行线程调度,是要等待的。但不管怎样,SendMessge是直接调WinProc的,这是没错的。
    2。大部分是,但不是绝对的,对程序员而言,所关心的绝大多数是是WM_COMMAND
    3。默认对话框函数由Windows提供,就象DefWindowProc一样
    4。主线程不必是UI的,甚至不必有消息循环
      

  4.   

    1。谢谢horris,你回答的好极了。
    2。4。不知道你看过这本书吗。是我太咬文嚼字?还是书措辞不严?
    3。它是由dialogbox()调用吗?
      

  5.   

    对话框的窗口过程是同Windows调用的,如果你在过程中返回0(我记不清了),指出没处理某个消息,则Windows会为你调默认对话框函数。我记得是这样。
    这本书没看过,我看的书比你的老的多,呵呵,大多是看的联机文档
      

  6.   

    2: 子控件传过来的准确说应该称为"通知(notify)",而不是消息(message)。
        由于这些控件都有各自内在的窗口函数,所以我们很少再去编写一个窗口函数来代替内置的窗口函数(如果替换窗口函数,那是“子类”或“超类”技术了),这样就没有办法具体控制子控件得到消息时发生的行为,这是些行为由内置窗口函数控制,如点击一个按钮会凹下去,
    有一个好办法是子控件到达一条消息时反馈一条通知,通知父窗口我被点击了或者我被双击等(对知框是这些子控件的父窗口)
        而通知是由两条消息来携带的,一条是WM_COMMAND,这条消息的HIWORD(wParam)是通知代码
    一般用于EDIT/STATIC/BUTTON/LISTBOX/COMBOBOX,,另一条是WM_NOTIFY,用于通用控件的通知代码,如LISTVIEW/TREEVIEW......
        有一个例外是SCROLLBAR,给父窗口发送消息WM_HSCROLL/WM_VSCROLL
        
        对话框实际是一种弹出式窗口(WS_POPUP),但也是一种预定义窗口,有默认的对话框函数
        而我们写的对话框函数是如何和默认的对话框函数相互作用,我就不清楚了,不过我想是子 
        类技术