★VC-MFC◆CToolbarCtrl && CDialog 下拉菜单 ★
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了★VC-MFC◆CToolbarCtrl && CDialog 下拉菜单 ★相关的知识,希望对你有一定的参考价值。
如题;
基于CDialog做成一个CToolBarCtrl的彩色菜单,我还需要一个下拉的,象浏览器一样的下拉菜单,简单代码如下:
i = m_wndToolBar.SendMessage(TB_ADDSTRING, 0, (LPARAM) (LPSTR) "登录");
tbb[nBtCount].iBitmap=0; //ButtonCount初值为0
tbb[nBtCount].idCommand=IDC_SYS_LOGIN; //工具栏与选单上某子项对应
tbb[nBtCount].fsState=TBSTATE_ENABLED;
tbb[nBtCount].fsStyle=TBSTYLE_DROPDOWN;***//已经显示下拉的图标
tbb[nBtCount].dwData=0;
tbb[nBtCount++].iString = i;
问题:
我该如何在tbb[nBtCount].fsStyle=TBSTYLE_DROPDOWN;添加自己的菜单内容,以及如何响应消息.
恳请老鸟予以阐述,太谢谢了.最好展示一下源码,我的油箱地址:lafengok@gmail.com
是基于对话框,而不是单文档的,网上很多例子都是msdn的单文档例子,这里就不要再回答了.再次谢谢!
晕了 :(
有么有简单点的方法?既然不知道怎么得到动态创建的dropdown按钮ID,怎么NOTIFY啊?
关键,消息映射的时候要有ID的吧?
更是,我是基于CDialog做的撒~
STone_DDONGDONG 该你出马详细解决了..................
响应消息,
CTRL+W,在Message Maps选项中.Class Name项选择你当前的对话框类
Object IDS 项选择你添加的工具栏ID.然后在Messages添加COMMAND消息响应函数即可.
另外::菜单,我觉得就是在消息响应函数中动态添加菜单,菜单的消息响应也如上面所说一样了. 参考技术B DROPDOWN按钮按下时向父窗口发送TBN_DROPDOWN消息(notification),父窗口响应这个消息,弹出菜单。
选中菜单后,父窗口响应 wm_command。
在父窗口中响应 重载 OnNotify,或在 windowproc中拦截 wm_notify。均可得到dropdown按钮的下拉消息。
C语言数组问题?
#include <stdio.h>
int main(void)
char a[]=0;
char *b;
b=&a[0];
scanf("%c%c%c",b,b+1,b+2);
printf("%c%c%c",*b,*(b+1),*(b+2));
scanf("%c%c%c",b+5,b+6,b+7);
printf("%c%c%c",*b,*(b+1),*(b+2));
printf("%c%c%c",*(b+5),*(b+6),*(b+7));
getchar();
getchar();
return 0;
这个为什么不能运行?
放第二次输入时,就会出现问题!
通过阅读您的程序,我想出现错误的原因应该在char a[]=0这句话,因为没有确定数组的长度,所以只能根据后面赋值的数据个数决定数组长度,但是恰好又只赋值了一个数,那么系统就会认定这个数组的长度为1。那么在后面将a[0]的地址赋值给指针变量b,因为a数组只有一个长度,所以后面的b+1,b+2…等等就是不确定的值,所以程序就会出错。 参考技术A
图中红色框内数组声明只有一个元素,也就是说数组大小是1,后面输入3个元素放哪里,放到不是数组的内存里那肯定会失败。
改成char a[10]=0;
注意这样也是只能放10个元素。想要更多改数字。
追问如果只能放一个数字,那么我为什可以放123三个字符?
追答你可以使用sizeof(a)看看它多大。你问的这个问题,是因为在c.语言里就算越界也不一定会崩溃,有可能你占用的还是你这个程序的内存空间或者系统没有强制保护的内存,所以给你的错觉是好像也可以用。如果占用保护的就会程序崩溃。
以上是关于★VC-MFC◆CToolbarCtrl && CDialog 下拉菜单 ★的主要内容,如果未能解决你的问题,请参考以下文章