"点击Edit改变其背景色彩"帖子及自己的帖子的总结

"点击Edit改变其背景颜色"帖子及自己的帖子的总结


原帖这里:
点击edit改变其背景颜色
http://bbs.csdn.net/topics/390320795
wm_command怎么会响应edit啊
http://bbs.csdn.net/topics/390322236?page=1#post-393258787


帖子里提到的内容较多,简单总结,分为两大类,一类是编辑框自绘问题; 一类是焦点问题。

总结的不对,轻拍,我菜鸟,谢谢.

一、编辑框自绘问题

编辑框的自绘问题

编辑框不存在wm_drawitem,如果要自绘,通过自己的onpaint或者wm_ctlcoloredit.



二、默认焦点问题:

1.关于对话框给控件分配一个默认焦点

是根据rc文件中的位置进行分配,如果控件中有bs_defpushdown风格按钮,未必会给其分配为默认焦点


 情况较为复杂,动态创建控件,没有尝试。

还有:普通窗口创建控件,不会分配默认焦点。



2.文本框在对话框上默认就会响应bn_setfocus, bn_killfocus等消息码。而按钮则不会,需要你设置风格:bs_notify. 设置后也有所差异,后者需要点击才会产生,不像文本框。

文本框在普通窗口中也是不会默认响应的,呵呵。

bn_setfoucs, bn_killfocus意义不大, 做一些特效处理,如“改变文字背景”,可以考虑鼠标进入,鼠标离开消息。

bs_notify这个消息意义不大,更以nm_customdraw无关, 如果用以nm_customdraw消息码进行绘制,那么不要去处理bs_ownder ,wm_paint.




3. 对话框给控件分配了默认焦点后,是否该控件收到焦点后,就会响应xs_setfocus, xs_killfocus?

未必。比如按钮,其需要设置bs_notify风格。如果是编辑框,则不需要。

普通窗口则不会设置默认焦点,而且普通窗口上的控件的ws_tapstop是无用的。




------解决方案--------------------
引用
普通窗口则不会设置默认焦点,而且普通窗口上的控件的ws_tapstop是无用的。

用IsDialogMessage处理一下就可以了

    while (GetMessage(&msg, NULL, 0, 0))
    {
      if (!IsDialogMessage(hwnd, &msg))
      {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
      }
    }