Showing tag results for Code

Sep 30, 2004
Post comments count0
Post likes count1

How to host an IContextMenu, part 7 – Invoking the default verb

Raymond Chen
Raymond Chen

When we last left our hero, we were wondering how to invoke the default verb programmatically. Now that we've learned a lot about how IContextMenu is used in the interactive case, we can use that information to guide us in its use in the noninteractive case. The key here is using the HMENU to identify the default menu item and just invoke it d...

Code
Sep 28, 2004
Post comments count0
Post likes count0

How to host an IContextMenu, part 6 – Displaying menu help

Raymond Chen
Raymond Chen

One of the subtleties of context menus is showing help in the status bar. Now, the program we've been developing doesn't have a status bar, so we'll fake it by putting the help text in the title bar. The key method for this task is IContextMenu::GetCommandString, which allows communication with a context menu handler about the verbs in the men...

Code
Sep 27, 2004
Post comments count0
Post likes count0

How to host an IContextMenu, part 5 – Handling menu messages

Raymond Chen
Raymond Chen

One bug that was called out immediately in our first attempt at displaying the context menu to the user is that the Open With and Send To submenus don't work. The reason for this is that these submenus are delay-generated (which explains why they don't contain anything interesting when you expand them) and owner-drawn (which you can't notice ye...

Code
Sep 24, 2004
Post comments count0
Post likes count0

How to host an IContextMenu, part 4 – Key context

Raymond Chen
Raymond Chen

Another of the bugs you may have noticed in our first attempt at displaying the context menu to the user is that the Delete command doesn't alter its behavior depending on whether you hold the shift key. Recall that holding the shift key changes the behavior of the Delete command, causing it to delete a file immediately instead of moving it to ...

Code
Sep 23, 2004
Post comments count0
Post likes count0

How to host an IContextMenu, part 3 – Invocation location

Raymond Chen
Raymond Chen

One of the bugs you may have noticed in our first attempt at displaying the context menu to the user is that the Properties dialog doesn't show up at the point you clicked. The Properties dialog isn't psychic; it doesn't know where the original mouse click occurred. You have to tell it. CMINVOKECOMMANDINFOEX info = { 0 }; ...

Code
Sep 22, 2004
Post comments count0
Post likes count0

How to host an IContextMenu, part 2 – Displaying the context menu

Raymond Chen
Raymond Chen

Instead of invoking a fixed verb, we'll ask the user to choose from the context menu and invoke the result. Make these changes to the OnContextMenu function: #define SCRATCH_QCM_FIRST 1 #define SCRATCH_QCM_LAST 0x7FFF #undef HANDLE_WM_CONTEXTMENU #define HANDLE_WM_CONTEXTMENU(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (HWND)(wParam), GET...

Code
Sep 21, 2004
Post comments count0
Post likes count0

Pitfalls in handling the WM_CONTEXTMENU message

Raymond Chen
Raymond Chen

Before we continue with our IContextMenu discussion, I need to take a little side trip and discuss the subtleties of the WM_CONTEXTMENU message. First, a correction to the existing <windowsx.h> header file: #undef HANDLE_WM_CONTEXTMENU #define HANDLE_WM_CONTEXTMENU(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (HWND)(wParam), GET_X_LPAR...

Code
Sep 20, 2004
Post comments count0
Post likes count1

How to host an IContextMenu, part 1 – Initial foray

Raymond Chen
Raymond Chen

Most documentation describes how to plug into the shell context menu structure and be a context menu provider. If you read the documentation from the other side, then you also see how to host the context menu. (This is the first of an eleven-part series with three digressions. Yes, eleven parts—sorry for all you folks who are in it just fo...

Code
Sep 16, 2004
Post comments count0
Post likes count0

What happens when you specify RegexOptions.ECMAScript?

Raymond Chen
Raymond Chen

The flag changes the behavior of .NET regular expressions. One of the changes I had discussed earlier was with respect to matching digits. For those who want to know more, a summary of the differences is documented in MSDN under the devious title "ECMAScript vs. Canonical Matching Behavior". Apparently some people had trouble finding that page...

Code
Sep 15, 2004
Post comments count0
Post likes count1

Interlocked operations don’t solve everything

Raymond Chen
Raymond Chen

Interlocked operations are a high-performance way of updating DWORD-sized or pointer-sized values in an atomic manner. Note, however, that this doesn't mean that you can avoid the critical section. For example, suppose you have a critical section that protects a variable, and in some other part of the code, you want to update the variable atomi...

Code