首先給個程序最小化爲托盤的例子:
程序裏沒有寫自定義消息、添加消息響應等操作。這個可以自己加上去。
通過上面的程序,可以將程序最小化到托盤,並且右擊圖標時會彈出菜單“關閉”,點擊後就關閉了。雙擊圖標會重新顯示程序窗口。
那麼我現在要在該菜單裏新添加幾個菜單項該怎麼辦呢?可以看到程序裏有這樣的代碼:
menu.AppendMenu(MF_STRING,WM_DESTROY,"關閉");
這就是添加菜單項的代碼,它傳遞了一個WM_DESTROY命令給主窗口,因此我們可以按同樣的方法添加自己的命令
menu.AppendMenu(MF_STRING,WM_RESHOW,"顯示");
WM_RESHOW是我自己定義的命令,表示重新顯示程序窗口,效果同雙擊該圖標一樣。
可奇怪的是當我單擊該菜單項時並沒有如我所預想的那樣重新顯示程序窗口。
經過思索我找到了原因:
你定義了消息後,選擇從彈出菜單響應,但是你用了ON_MESSAGE宏,這個宏只是作出通常消息的映射,而不是命令消息的映射。既然是菜單,當然要用命令消息。WM_DESTROY之所以能夠成功,正是因爲它用了命令消息映射。
所以解決辦法就是把
ON_MESSAGE(WM_RESHOW,OnReshow)
改成 ON_COMMAND(WM_RESHOW,OnReshow)
最終實現了我要的功能,接着就可以按自己的要求添加菜單項了。