如何在一个Picture Control控件里放一个自绘按钮?

时间:2022-04-04 20:36:28
     写一个对话框程序,有一个小窗口,然后可以在这个小窗口内显示字符串,并且当鼠标移上去的时候会显示字符串的边框,而且可以拖动. 
      于是我在对话框的一部分放了一个图片控件作背景,然后重载了CButton类,重写了DrawItem函数,让字符串作为一个按钮显示上去,并且背景是白的,鼠标移上去的时候就显示边框.
      按钮的功能是实现了,背景白的,边框也能显示,问题是这只是在对话框显示是正确的.要当creat按钮的时候把父句柄设为图片控件的句柄的时候,按钮可以看到,但是看到的不是白色背景,而是对话框的灰色,而且按钮动作也不响应了,按钮上的字也显示不出来.
      用CBUTTON却又能显示,按钮也可以动作.为什么我重载的CBUTTON却不行呢,在重载的DrawItem函数里,我是先填充的背景,最后写的字呀,却没显示......
      如果是盖住了,搜了方法说是调TAB顺序,可是按钮是自绘的,这个TAB顺序怎么调呢.按钮的ID值,我调得比图片控件大也试过,调得小也试过,都不行.

这个需要怎么改呢.

6 个解决方案

#1


BringWindowToTop 可以置顶 
tab顺序跟ID值没关系 一般跟创建顺序相关 

关于这个按钮 加上 WS_CHILD|WS_CLIPSIBLINGS 试试?

#2


重载代码呢?

#3


引用 1 楼 vann1982 的回复:
BringWindowToTop 可以置顶 
tab顺序跟ID值没关系 一般跟创建顺序相关 

关于这个按钮 加上 WS_CHILD|WS_CLIPSIBLINGS 试试?

用BringWindowToTop和SetWindowPos都试了,都显示不出来,郁闷ING.
在DrawItem那设断点,居然一直都没断下来.
直接::PostMessageW(mbutton->m_hWnd, WM_DRAWITEM, NULL, NULL);都没断下来..

#4


引用 2 楼 babilife 的回复:
重载代码呢?

就是网上那个自绘按钮.
在creat按钮的时候,把按钮的父句柄设为对话框的时候,按钮可以显示,消息也响应.
但如果设为图片控件,刚只显示按钮的那个块块,按钮上的字不显示,而且按钮不响应消息.

#5


不要用图片控件
把图片直接画到对话框的背景上

#6


引用 5 楼 xianglitian 的回复:
不要用图片控件
把图片直接画到对话框的背景上

原来用图片控件想着的是不用绘背景.
现在看来只有在内存DC上画了,再复制上去了...
谢谢大家,结贴了

#1


BringWindowToTop 可以置顶 
tab顺序跟ID值没关系 一般跟创建顺序相关 

关于这个按钮 加上 WS_CHILD|WS_CLIPSIBLINGS 试试?

#2


重载代码呢?

#3


引用 1 楼 vann1982 的回复:
BringWindowToTop 可以置顶 
tab顺序跟ID值没关系 一般跟创建顺序相关 

关于这个按钮 加上 WS_CHILD|WS_CLIPSIBLINGS 试试?

用BringWindowToTop和SetWindowPos都试了,都显示不出来,郁闷ING.
在DrawItem那设断点,居然一直都没断下来.
直接::PostMessageW(mbutton->m_hWnd, WM_DRAWITEM, NULL, NULL);都没断下来..

#4


引用 2 楼 babilife 的回复:
重载代码呢?

就是网上那个自绘按钮.
在creat按钮的时候,把按钮的父句柄设为对话框的时候,按钮可以显示,消息也响应.
但如果设为图片控件,刚只显示按钮的那个块块,按钮上的字不显示,而且按钮不响应消息.

#5


不要用图片控件
把图片直接画到对话框的背景上

#6


引用 5 楼 xianglitian 的回复:
不要用图片控件
把图片直接画到对话框的背景上

原来用图片控件想着的是不用绘背景.
现在看来只有在内存DC上画了,再复制上去了...
谢谢大家,结贴了