Enabling/disabling a control

  • Thread starter Thread starter Chris Saunders
  • Start date Start date
C

Chris Saunders

I'm hoping that this question is not off topic on this newsgroup. If it is
please redirect me if you know an appropriate group. I'm actually writing a
program in another language (Eiffel) but if I can learn how to accomplish
this in C I can convert the solution. What I wish to do is use
PostThreadMessage() to send a message to a control so that it will become
enabled/disabled. Reading the documentation on WM_ENABLE leads me to
believe that this message will not accomplish this. Can anyone assist?

Regards
Chris Saunders
 
Chris Saunders said:
I'm hoping that this question is not off topic on this newsgroup. If it
is please redirect me if you know an appropriate group.

You may want to post follow-up in the user interface group

microsoft.public.win32.programmer.ui

but SDK questions are not unheard-of in here.
I'm actually writing a program in another language (Eiffel) but if I can
learn how to accomplish this in C I can convert the solution.
OK.

What I wish to do is use PostThreadMessage() to send a message to a
control so that it will become enabled/disabled. Reading the
documentation
on WM_ENABLE leads me to believe that this message will not accomplish
this. Can anyone assist?

What you do is to pass the handle to the control to EnableWindow(). If you
don't have a handle to the control but you now its ID and the handle to its
parent, you call GetDlgItem() first whether or not the parent is a dialog.
That will get a handle which you can enable.

The message you found is a noticication that actually comes of changing the
enabled state of the window.

Regards,
Will

www.ivrforbeginners.com
 
First, thanks for the response Will. I'll continue posting here as your
response dosn't make that seem objectionable and I see no one else posting
"off-topic" messages. The first thing that I attempted to do was just what
you suggested - I was searching in the MSDN documentation and came across
EnableWindow() but that was not working for me. Since this application is
not written in C so I was reluctant to discuss it too much but I guess I
described too little.

In my application I am launching a thread procudure and am then attempting
to change the enabled state of some controls on my main window (not a
dialog). I know that on windows the state of controls is not supposed to be
altered by a separate thread. In C# I have seen code that overcomes this
restriction but I cannot access C# code from Eiffel very easily - however I
can access C Windows API functions easily.

This is why I was hoping to use PostThreadMessage() as EnableWindow() is
doing nothing when called from my thread function. In Eiffel I do have
access to the handles (HWND) of the controls I am using.

Do you have any ideas on how I might overcome this?

Thanks again and regards
Chris Saunders
 
In my application I am launching a thread procudure and am then attempting
to change the enabled state of some controls on my main window (not a
dialog). I know that on windows the state of controls is not supposed to be
altered by a separate thread.

Chris,

From your thread, post a user defined message (use PostMessage not
PostThreadMessage) to your main window and in your main window handle
that message and call EnableWindow.

Dave
 
Thanks Dave

This will be complicated to do from Eiffel but I think I know how to
accomplish this. I've been up all night (its 7:45 AM here) and I think I
need to try and get some sleep. After I have tried this I'll reply with my
results. I may have further questions.

Regards
Chris Saunders
 
My thanks again to David Lowndes.

I tried what you suggested and it succeeded - I very much appreciate your
help.

Regards
Chris Saunders
 
Back
Top