动态创建的static高亮显示,为什么不行啊?

ProgrammerNO1 2009-10-13 03:37:42
动态创建
hwnd g_SecondWnd = CreateWindow(TEXT("STATIC"),
TEXT(""),
WS_VISIBLE|SS_NOTIFY|SS_BITMAP,
60, 50, 100, 15,
hWnd, (HMENU)(IDC_lpt), g_hInst, NULL);

SendMessage(g_SecondWnd,STM_SETIMAGE,(WPARAM)IMAGE_BITMAP,(LPARAM)LoadBitmap(g_hInst,MAKEINTRESOURCE(IDB_BITMAP_wen)));

1, 这样弄了后,图片是出来了,但是所有控件上的文字全消失了,怎么解决 ?
2, 我想实现的就是,比如我们打开电话薄,当显示第一行时都有高亮显示,表示这一条记录被选中,而我那个static就相当这个,后面有个背景图显示区分是否这一行被选中
3, 另一种想法:在static后自绘长条,颜色自定义,通过操作方向键往下走,每行都有高亮,用来区分哪一行高亮显示?
4, 手机上这个功能是怎么实现的,采用哪种方式会更好些?
...全文
148 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2009-10-20
  • 打赏
  • 举报
回复
问题解决了么?
ProgrammerNO1 2009-10-19
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 sandy_zc_1 的回复:]
其实这相当于你去自己实现一个小的GUI。因为你的需求很简单,因此不会很复杂。
不需要依赖Windows的控件消息来响应,你完全可以通过捕获整个窗体的消息然后通过一些判断来确定到底是谁被响应了(Windows内部也不就是如此么)

在很多游戏中整个GUI完全不依赖Windows的控件的,全部是自己管理和绘制,整个程序只需要一个主窗体接受Windows消息就可以了。有点扯远了,呵呵。


至于#20楼的问题:通过SetBkMode来设置背景模式为透明。
[/Quote]

1, 没扯远,说的有道理 ,,呵呵
2, 我设置了setbkmode为透明,还是不行啊
因为我窗体的背景是windows默认颜色 ,而我把static背景设置成红色,然后setbkmode(),目的就是让它高亮,可是有字的区域,红色就显示不了,字把颜色覆盖了
sandy_zc_1 2009-10-14
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 programmerno1 的回复:]
to xianglitian,sandy_zc_1
有没画相关的例子没,参考一下,谢谢了

因为是在手机上做这些东东,担心画的东东太占空间了吧,程序打包后还要附带其他东东
[/Quote]

你搞WM开发?那的确会受到一些限制,不过要做也是可以的。
使用GDI,接收到WM_PAINT消息的时候绘制你的控件。先用BitBlt绘制背景,再在上面用DrawText或者ExtTextOut输出文字就可以达到你说的效果了。如果内存充裕的话建议构建一个缓冲。

处理得当的话不会比你用那些控件资源更费空间,因为MFC那些控件背后还是要通过GDI来绘制的么。
ProgrammerNO1 2009-10-14
  • 打赏
  • 举报
回复
to xianglitian,sandy_zc_1
有没画相关的例子没,参考一下,谢谢了

因为是在手机上做这些东东,担心画的东东太占空间了吧,程序打包后还要附带其他东东
sandy_zc_1 2009-10-14
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 xianglitian 的回复:]
我觉得其实你完全没有必要用控件
自己画不就行了
想怎么样就怎么样
[/Quote]

同意
向立天 2009-10-14
  • 打赏
  • 举报
回复
我觉得其实你完全没有必要用控件
自己画不就行了
想怎么样就怎么样
ProgrammerNO1 2009-10-14
  • 打赏
  • 举报
回复
又沉了,大家这样忙啊,ding
sandy_zc_1 2009-10-14
  • 打赏
  • 举报
回复
其实这相当于你去自己实现一个小的GUI。因为你的需求很简单,因此不会很复杂。
不需要依赖Windows的控件消息来响应,你完全可以通过捕获整个窗体的消息然后通过一些判断来确定到底是谁被响应了(Windows内部也不就是如此么)

在很多游戏中整个GUI完全不依赖Windows的控件的,全部是自己管理和绘制,整个程序只需要一个主窗体接受Windows消息就可以了。有点扯远了,呵呵。


至于#20楼的问题:通过SetBkMode来设置背景模式为透明。
ProgrammerNO1 2009-10-14
  • 打赏
  • 举报
回复
画上去了,有字的地方背景被覆盖了,,咋解决呀,呵
ProgrammerNO1 2009-10-14
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 xianglitian 的回复:]
判断LButtonDown
不会很复杂
[/Quote]

谢谢你这种思路,以后再做优化,现在把功能实现先,呵呵
向立天 2009-10-14
  • 打赏
  • 举报
回复
判断LButtonDown
不会很复杂
ProgrammerNO1 2009-10-14
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 xianglitian 的回复:]
引用 13 楼 programmerno1 的回复:
to xianglitian,sandy_zc_1
有没画相关的例子没,参考一下,谢谢了

因为是在手机上做这些东东,担心画的东东太占空间了吧,程序打包后还要附带其他东东


关于绘制的例子网上应该有很多吧
如果你是做嵌入式开发更建议自绘
因为用控件系统是要分配句柄的
更耗资源

你这个应用其实很容易实现
别用static了
[/Quote]
我画上去后,还要响应控件事件的
照你说法,画了后,获得选中(指我的static)的位置焦点,然后响应?
向立天 2009-10-14
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 programmerno1 的回复:]
to xianglitian,sandy_zc_1
有没画相关的例子没,参考一下,谢谢了

因为是在手机上做这些东东,担心画的东东太占空间了吧,程序打包后还要附带其他东东
[/Quote]

关于绘制的例子网上应该有很多吧
如果你是做嵌入式开发更建议自绘
因为用控件系统是要分配句柄的
更耗资源

你这个应用其实很容易实现
别用static了
ProgrammerNO1 2009-10-14
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 sandy_zc_1 的回复:]
引用 13 楼 programmerno1 的回复:
to xianglitian,sandy_zc_1
有没画相关的例子没,参考一下,谢谢了

因为是在手机上做这些东东,担心画的东东太占空间了吧,程序打包后还要附带其他东东


你搞WM开发?那的确会受到一些限制,不过要做也是可以的。
使用GDI,接收到WM_PAINT消息的时候绘制你的控件。先用BitBlt绘制背景,再在上面用DrawText或者ExtTextOut输出文字就可以达到你说的效果了。如果内存充裕的话建议构建一个缓冲。

处理得当的话不会比你用那些控件资源更费空间,因为MFC那些控件背后还是要通过GDI来绘制的么。

[/Quote]

文字是从其他文件读过来的,自动自成的
你那有现成画的例子么,发我mail:
peng_perfect@yahoo.com.cn
就是画成长条高亮显示的框框就好了,谢谢了
ProgrammerNO1 2009-10-13
  • 打赏
  • 举报
回复
快沉了,顶上去,请高手指点一下啊
ProgrammerNO1 2009-10-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 xianglitian 的回复:]
引用 6 楼 programmerno1 的回复:
我现在是这样的,我在创建每个static的时候 分配了一个句柄
g_sencond[i],这个就算是编号了吧,没明白你说的为什么还要另编号
然后updatewindow(g_sencond[0])


这样可以啊
但是你得把先前选中的复原
对吧
[/Quote]

复原??我进去的时候 ,就没高亮显示过,没明白,呵
向立天 2009-10-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 programmerno1 的回复:]
我现在是这样的,我在创建每个static的时候 分配了一个句柄
g_sencond[i],这个就算是编号了吧,没明白你说的为什么还要另编号
然后updatewindow(g_sencond[0])
[/Quote]

这样可以啊
但是你得把先前选中的复原
对吧
ProgrammerNO1 2009-10-13
  • 打赏
  • 举报
回复
我现在是这样的,我在创建每个static的时候 分配了一个句柄
g_sencond[i],这个就算是编号了吧,没明白你说的为什么还要另编号
然后updatewindow(g_sencond[0])
向立天 2009-10-13
  • 打赏
  • 举报
回复
如果你设置了SS_bitmap
static就是图片控件
当然没有文字了

你不过是要换背景色
不用设置SS_bitmap风格
ProgrammerNO1 2009-10-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xianglitian 的回复:]
不用MFC也可以用listctrl把

另外
设一个变量
把你的static编上号
把选中的static的编号存到变量中
更新显示时全都重绘一边就可以了
变量里存的谁谁就高亮
其余不高亮
[/Quote]

问题是先要解决我文字不显示的状态吧,我设置了SS_bitmap不做任何操作,我的文字都消失了
加载更多回复(3)

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧