life ideas

May 3, 2007

FUCK Microsoft: why my menubar doesn’t show up

Filed under: Uncategorized — manoftoday @ 3:51 am

另外,关于你说的菜单的问题,我来解答吧:
VS2005是可以在资源编辑器中编辑菜单的,但是还需要手工编辑一下.rc文件。
用资源编辑器编辑好菜单后,打开.rc文件,应该能找到类似下面的一段:
IDR_POPUP_MENU_BAR  //这是菜单的ID,可以随便改,但要在resources.h文件中define一下给个值
BEGIN
MENUITEM “OK”,                        IDOK
POPUP “Option”
BEGIN
MENUITEM “Action1”,    ID_ACTION1
MENUITEM “Action2″,    ID_ACTION2

END
END

接下来打开那个.<b style=”color:black;background-color:#99ff99”>rc2</b>文件,加入下面的一段
IDR_POPUP_MENU_BAR SHMENUBAR DISCARDABLE
BEGIN
IDR_POPUP_MENU_BAR, //这里的ID应当与.rc文件中的相同。
2,

I_IMAGENONE, IDOK, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE,
IDS_OK, 0, NOMENU,

I_IMAGENONE, ID_OPTION, TBSTATE_ENABLED, , TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE,
IDS_OPTION, 0, 1,
END

简单解释一下:
IDR_POPUP_MENU_BAR是弹出菜单的资源ID。
2 是指有两个软键。
接下来两行就是左软键的定义:
I_IMAGENONE 意思是菜单没有图片,SmartPhone2003不支持图片菜单,所以只能写这个了。
IDOK 就是.rc文件中的菜单项的ID,
TBSTATE_ENABLED 好像是指菜单的状态,一般就写这个了。
TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE 是指菜单风格,看字面意思应该就理解了,这是一个Button而不是弹出菜单,并且是Auto Size的。
IDS_OK 是指这个菜单上面要显示的字符串资源的ID,后面会提到。
0 忘了什么意思,反正都是写0就对了。
NOMENU 意思是没有子菜单。

再接下来两行是右软键(弹出菜单)的定义:
I_IMAGENONE 同上
ID_OPTION 这个只需要在resources.h文件中define一下给个值就行了,当然要是一个没有被使用的值。
TBSTATE_ENABLED 同上
TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE 是指菜单风格,看字面意思应该就理解了,这是一个弹出菜单而不是Button,并且是Auto Size的。
IDS_OPTION 是指这个菜单上面要显示的字符串资源的ID,后面会提到。
0 同上
1 好像就是指有子菜单吧,反正就写1就对了。

在.rc文件中定义字符串资源:
STRINGTABLE
BEGIN
IDS_OK                  “Ok”
IDS_OPTION              “Option”
END

IDS_OK和IDS_OPTION需要在resources.h文件中define并且给一个ID值,当然也可以在资源编辑器中来编辑添加这两个字符串资源。

好了,到此为止前期的准备工作都做好了,剩下的就很简单了,在程序中调用就可以了:
在YourAppDlg类的OnInitDialog()函数中,找到下面的代码:
if (!m_dlgCommandBar.Create(this) ||
!m_dlgCommandBar.InsertMenuBar(IDR_MAINFRAME))
{
TRACE0(“<b style=”color:black;background-color:#a0ffff”>Failed</b> to create CommandBar\n”);
return FALSE;      // fail to create
}
把IDR_MAINFRAME 换成IDR_POPUP_MENU_BAR,就搞定了。
看到这里应该明白了吧?IDR_MAINFRAME是VS2005帮我们自动生成的MenuBar,只有左软件OK,没有右软件,IDR_POPUP_MENU_BAR是我们前面自己做的MenuBar。我们也可以直接修改自动生成的MenuBar,然后在这里就可以直接使用IDR_MAINFRAME这个ID而不需要改了。道理是一样的。

这可是我一个字一个字打出来的,给点分吧,打字很辛苦的。

http://72.14.253.104/search?q=cache:y_1MJHs1o9AJ:fenlei199.52dev.cn/449874.html+SHCreateMenuBar+failed+rc2&hl=en&ct=clnk&cd=7&gl=us

http://blogs.msdn.com/johnkenn/archive/2005/08/22/454858.aspx

Advertisements

2 Comments »

  1. when you say it’s ove. Corrina Eudora.

    Comment by Corrina Eudora — September 19, 2007 @ 6:17 pm

  2. oh,when you took my arm, that’s when we fell apar. Mica Kingsley.

    Comment by Mica Kingsley — October 21, 2007 @ 8:11 pm


RSS feed for comments on this post. TrackBack URI

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Create a free website or blog at WordPress.com.

%d bloggers like this: