I am losing context help when I use m_cEdit.ModifyStyleEx( NULL, WS_TABSTOP);

Posted on 2004-09-13
Last Modified: 2013-11-20

I have an few edit box on the screen of an MFC dialog and property page. I have to sometimes dynamically make a few controls "readonly" due to business logic. Because of this read only state, it is also required that the control is dynamically remove from the tab sequence. But when I do this, I noticed that the context help is lose. ie when I press the dialog's help button then move the help cursor onto the control and click, no help message pops up.

the code for disable the control is as follows
m_cEdit.ModifyStyleEx( NULL, WS_TABSTOP);

Note: I do not wish to make the control "disable", as the text goes grey, I only wish to make it "readonly"!!

So why is the help lost when I called
m_cEdit.ModifyStyleEx( NULL, WS_TABSTOP); ??

When I comment the above line out, and leave the m_cEdit.SetReadonly(TRUE) the context helps works fine! Also I have a few other controls on the page which I have non-dynamically set the TabStop to be false and SetReadonly to be true, but the context helps works fine on them. it is only when I do it dynamicall that the problem arise.

Another question while i am here, the documentation says ModifyStyle(DWord Remove, DWord Add) but I find that
m_cEdit.ModifyStyleEx( NULL, WS_TABSTOP); removes the tab stop and
m_cEdit.ModifyStyleEx( WS_TABSTOP, NULL); sets it. ??? shouldn't it be the other way around??

Any comments/explanation would be much appreciated.

Question by:santuon
LVL 44

Accepted Solution

AndyAinscow earned 500 total points
ID: 12051721
m_cEdit.ModifyStyleEx( NULL, WS_TABSTOP); removes the tab stop and
m_cEdit.ModifyStyleEx( WS_TABSTOP, NULL); sets it. ??? shouldn't it be the other way around??

There are TWO functions ModifyStyle and ModifyStyleEx, one for the window styles the other for the extended window styles.  Try using ModifyStyle (no Ex) and see if that makes any difference.
LVL 15

Expert Comment

ID: 12053069

BOOL ModifyStyleEx(
   DWORD dwRemove,
   DWORD dwAdd,
   UINT nFlags = 0

BOOL ModifyStyle(
   DWORD dwRemove,
   DWORD dwAdd,
   UINT nFlags = 0

Styles specified in the first parameter should be removed and styles specified in the second parameter should be set.

As Andy suggested, use
ModifyStyle(WS_TABSTOP,0) to remove the edit box from the tab order list.
ModifyStyle(0,WS_TABSTOP) to add the edit box to the tab order list.
LVL 16

Expert Comment

ID: 12053270
To add some more to above said:

Using ModifyStyleEx with WS_TABSTOP is in fact the same as calling ModifyStyleEx(WS_EX_CONTROLPARENT,..) (WS_TABSTOP and WS_EX_CONTROLPARENT have the same value, 0x1000).
WS_EX_CONTROLPARENT   Allows the user to navigate among the child windows of the window by using the TAB key.
So it looks like WS_TABSTOP... :)

And, from MSDN:
You can turn this style on and off to change dialog box navigation. To change this style after a window has been created, use *SetWindowLong*."
Use Case: Protecting a Hybrid Cloud Infrastructure

Microsoft Azure is rapidly becoming the norm in dynamic IT environments. This document describes the challenges that organizations face when protecting data in a hybrid cloud IT environment and presents a use case to demonstrate how Acronis Backup protects all data.


Author Comment

ID: 12060397
Great feedback. I appreciate everyone's comment but since AndyAinscow was first to reply,  I accepted his answer, thought everyone's answer would have achieved the same results.

It seems that using
ModifyStyle(WS_TABSTOP,0) removes the Tab order unlike ModifyStyleEx(WS_TABSTOP, 0) which adds it. Not only that, but the ModifyStyle method also does lose context help. So using this fixed my original problem!!!


LVL 44

Expert Comment

ID: 12062573
Be careful (I get the feeling you don't appreciate the following).

ModifyStyle and ModifyStyleEx are TWO separate functions that perform different actions.  They are not interchangable.  The second is not an extension to the first.
LVL 16

Expert Comment

ID: 12062587
And the funny thing that ModifyStyleEx(WS_TABSTOP, 0) means ModifyStyleEx(WS_EX_CONTROLPARENT, 0)  :o)

Featured Post

ScreenConnect 6.0 Free Trial

At ScreenConnect, partner feedback doesn't fall on deaf ears. We collected partner suggestions off of their virtual wish list and transformed them into one game-changing release: ScreenConnect 6.0. Explore all of the extras and enhancements for yourself!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction: Load and Save to file, Document-View interaction inside the SDI. Continuing from the second article about sudoku.   Open the project in visual studio. From the class view select CSudokuDoc and double click to open the header …
Introduction: Dialogs (2) modeless dialog and a worker thread.  Handling data shared between threads.  Recursive functions. Continuing from the tenth article about sudoku.   Last article we worked with a modal dialog to help maintain informat…
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
This Micro Tutorial demonstrates using Microsoft Excel pivot tables, how to reverse engineer competitors' marketing strategies through backlinks.

770 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question