Context Menu Question

J

John Erickson

Hi,

I think I know what you are probably going to say to this, but I thought I'd
give it a shot anyway. I read all the other messages about Context menus and
how they are unsupport, but there's this hack. I've been trying to use the
hack for my Outlook 2000 add-in, but I'm having a really strange problem. I
track down the "Context Menu", then I find the CommandBarPopup on it that I
want to add 3 buttons to. I'm able to do all that and my new buttons work
fine. I can click on them and my event gets triggered and everything is
wonderful. The thing I can't explain is that my new buttons work the first
time the context menu is displayed, but 2nd and subsequent times my buttons
are missing. When I look at the context menu collection on the 2nd and
subsequent attempts to bring it up, the controls I added to the context menu
are still there. They're enabled, visible, have a height and a width, but
they just don't show up. I've attempted to use the Delete method on my
buttons and re-add them, but I can't seem to get that to work. The delete
doesn't seem to do anything. Is there some other call I need to make to have
the delete method work? Anyone have a clue how to fix this? I'd be happy to
share code on it, but it's somewhat lengthy.

John
 
J

John Erickson

I have some new info. I just started my testing on Outlook 2002 and my
context menu problem doesn't occur there. My 3 added buttons appear on the
context menu ALL the time. Not just the first time. I'm using the exact same
code as I am for Outlook 2000. Any idea what is different in Outlook 2000
that's making my added buttons only appear the first time? Or better yet any
ideas on a work around?

John
 
K

Ken Slovak - [MVP - Outlook]

Most of the samples I've used or seen for that hack destroy the UI and
re-create it when OnUpdate() fires. Otherwise the button can go out of scope
and just sit there doing nothing. Look in the samples for a
CommandBar.Reset() call.
 
J

John Erickson

That's what I'm attempting to do. I'm pretty sure my Unadvise is working
properly. Then I'm using the Delete method (in reverse item# order in case
Delete changes the item numbering as I'm traversing the controls collection).
Is the Office::CommandBarControl::Delete method the proper way to remove the
buttons I added on the first context display? I'm asking because it doesn't
seem to actually remove the controls even though it succeeds. What's the real
meaning of the bool argument in that method? There's a method called
__NewEnum (or something to that effect) should I be using that or some other
call after the Deletes to rebuild the controls collection? It's just really
odd that the same code works fine in Outlook 2002 but doesn't in Outlook 2000.

John
 
K

Ken Slovak - [MVP - Outlook]

I use the Reset() method of the CommandBar to clear the user added controls
before I add them again in OnUpdate().
 
J

John Erickson

Thanks again Ken! That got me there. One note though. In my case since I was
adding buttons to a sub-menu (CommandBarPopup), it took a couple coding
attempts on my part. Initially I had been deleting the added buttons from the
collection in the CommandBarPopup (the Junk E-mail sub-menu in my case), so I
simply did the Reset() call you recommended on that CommandBarPopup object.
That resulted in the same behaviour. My added buttons appeared on the first
context menu, but not subsequent ones. In order to finally fix the problem I
had to move the Reset() up a level to the CommandBar representing the
"Context Menu". Once I did that, my added buttons now appear ALL the time. I
appreciate the guidence.

John
 
N

nikhil

Hello,

I am doing similar kind of thing that John ericskon is talking about.
The only difference is that i am adding menu items in the main context menu.
The problem that i am facing is, when i right click on a mail item my menu
items
are getting inserted & are working fine all the time.But when i right click
on a
non-mail item or a mail item(with attachment) outlook simply crashes.
slovak sir can you please giude me on this.

nikhil
 
K

Ken Slovak - [MVP - Outlook]

If you are going to hijack other threads at least provide enough information
for your question to be answered. I have no idea what your code is doing,
what version of Outlook, whether it's VBA or addin code or in what language,
or much of anything else other than your code isn't working right.

Are you assuming a mail item and not testing for it before instantiating a
mail item object?
 
N

nikhil

hello sir,
thanks for your reply.
m extremely sorry for the lack of information.
I have written a Add-in for this purpose in VC++/ATL.
The same code is working fine with the Outlook XP & Outlook 2003.
But the problem is occuring in case of Outlook 2000.
Before doing this i refered following link which also contains your reply :
http://www.gtro.com/delphi/spamfilter_e.php
I am following exactly similar steps which are discussed above(handling
OnUpdate event).
My observation is mail item's(with attachment ) context menu contains more
menu items than a normal mail item's context menu does have.
so may be the case which is discussed in above link is occuring.
Don't know what exactly is happening as m just a begginer in this field.
here's my pseudo code for it:

//Everything is done in OnUpdate()
1. Enumerating CommandBars collection to locate "Context Menu".
2. spCtxtMenuCmdBar->Reset();//before exceutign this code it's crashing.
spCtxtMenuCmdBar->get_Protection(&OldCmdBarProtection);
spCtxtMenuCmdBar->put_Protection(msoBarNoProtectio);
3. Regular code for adding button into it & advise click event for it.
4. restore old protection.

Nikhil.
 
K

Ken Slovak - [MVP - Outlook]

I have no idea why you are having that problem. My suggestion would probably
be to not offer support for the context menus in Outlook 2000.
 
N

nikhil

Hello ,

Thanks for the reply.I really appreciate it.
I will still do some try outs for it.If i find something i'll surely be
posting
it here.

nikhil
 
N

nikhil

Hello,

I am facing a weird issue which is as follows:
i have written a ATL/COM add-in which adds a separate toolbar & some menu
items into tools menu.
now i open a new explorer window, and then i reset the menu bar through
Customize->reset.after doing this when i now click on "Tools" menu (in newly
created window )outlook simpally crashes.
Code for adding buttons & menu items is absolutely normal.(code supports
buttons & menu items in all open explorer windows.)
this problem occurs only in Outlook 2000.
I think the problem might be similar to the one of context menus.
 
K

Ken Slovak - [MVP - Outlook]

It sounds like your code is assuming that something will be there which now
isn't due to the customization reset, but I have no idea what. Are you
referring to any of the UI you are creating or assuming will be there in any
events earlier than the first Inspector.Activate() event?
 
N

nikhil

Hello,

Thanks for the reply.
yes i am referring to the menu items which i inserted into Tools menu.
i am calling put_enabled(VARIANT_FALSE), which eventually fails, because of
absence of menu items,thats alright.And i am creating my UI in the first
activate event of explorer window(not inspector window).
is this problem already present in outlook2000 ?(like the one of context
menu )
i am not getting why this is happening.
 
K

Ken Slovak - [MVP - Outlook]

Don't assume the UI is there. Test for it and if it's not there re-create it
again.
 
N

nikhil

Hello,

Thanks again for your immediate response.
I am checking for the existence of my menu items in Update event.
When i don't find them, i am adding those menu items again as per
discussion. But still it results the same.
 
N

nikhil

Hello,

Thanks for your immediate response again.
I am searching for my menu items in Update event.
When i don't found them, i am creating them as per discussion.
But still the problem remains.
can you suggest any link which has sample code for adding menu items.
(probably in VB) so that i can cross check in Outlook 2000.
 
K

Ken Slovak - [MVP - Outlook]

Go to www.outlookcode.com and search on "context menu". There are a number
of samples there, including in C++ I think, as well as threads on problems
with context menus. Something there might be related to your problem.
 
N

nikhil

Hello,

Thanks for immediate response again.
I tried searching for my menu items in Update event(as reseting the menu bar
should update commandbars collection.)
and when i don't find them, i create them again but still same problem
remains.
 
N

nikhil

Hello,

Thanks for your immediate response again.
I am searching for my menu items in Update event now.
as reseting the menu bar should update the commandbars collection.
when i don't find them i create them again, but still the problem exists.
For all other version of Outlook code running fine.
(It is happening in case of Outlook 2000 only.)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top