ON_LBUTTONDOWN
-
Hi, I have defined handlers for WM_LBUTTONDOWN and WM_LBUTTONUP. The routines do receive control when pressing/releasing the button, EXCEPT if the mouse is over a static control - and I want to gain control exactly in that situation. In fact, the handlers don't receive the control if the mouse is over any control on the main window, only if the mouse is over an area of the main window, where there is no control. I can process the CLICKED event for that control, but that's not what I need. This particular control does not have any message handler. The documentation states If the mouse is not captured, the message is posted to the window beneath the cursor but ON_WM_LBUTTONDOWN and LBUTTONUP don't accept a specification of the control. How can I catch this event related to a specific control?
-
Hi, I have defined handlers for WM_LBUTTONDOWN and WM_LBUTTONUP. The routines do receive control when pressing/releasing the button, EXCEPT if the mouse is over a static control - and I want to gain control exactly in that situation. In fact, the handlers don't receive the control if the mouse is over any control on the main window, only if the mouse is over an area of the main window, where there is no control. I can process the CLICKED event for that control, but that's not what I need. This particular control does not have any message handler. The documentation states If the mouse is not captured, the message is posted to the window beneath the cursor but ON_WM_LBUTTONDOWN and LBUTTONUP don't accept a specification of the control. How can I catch this event related to a specific control?
You can subclass your control. Suppose you have a static control on which you want to handle the notifications for WM_LBUTTONDOWN and WM_LBUTTONUP. Derive a class from CStatic( say you name the derived class as CExStatic). Create a member variable for the static control and change CStatic to CExStatic.( Add the header file CExStatic.) You can implement the notifications and handle the behavior in the derived class.
Somethings seem HARD to do, until we know how to do them. ;-)_AnShUmAn_
-
You can subclass your control. Suppose you have a static control on which you want to handle the notifications for WM_LBUTTONDOWN and WM_LBUTTONUP. Derive a class from CStatic( say you name the derived class as CExStatic). Create a member variable for the static control and change CStatic to CExStatic.( Add the header file CExStatic.) You can implement the notifications and handle the behavior in the derived class.
Somethings seem HARD to do, until we know how to do them. ;-)_AnShUmAn_
-
If you use the SS_NOTIFY style on your static controls they will notify their parent window when the user clicks on them.
It's not rocket surgery!
Within you lies the power for good, use it!!!
-
Vancouver wrote:
I thought I can somehow avoid the trouble
It's not much trouble. MFC does the work for you :)
"Posting a VB.NET question in the C++ forum will end in tears." Chris Maunder
-
Vancouver wrote:
I thought I can somehow avoid the trouble
It's not much trouble. MFC does the work for you :)
"Posting a VB.NET question in the C++ forum will end in tears." Chris Maunder
It was not MUCH trouble, for sure, but it increases the amount of code, it requires two new source files, it requires duplicating some handlers. I am not lazy to do that, but I like compact code, the smaller the better. Plus, my SetCursor is not working any more, not only in the new handlers, but not even in the main window, and I don't see the connection.
-
It was not MUCH trouble, for sure, but it increases the amount of code, it requires two new source files, it requires duplicating some handlers. I am not lazy to do that, but I like compact code, the smaller the better. Plus, my SetCursor is not working any more, not only in the new handlers, but not even in the main window, and I don't see the connection.
Vancouver wrote:
Plus, my SetCursor is not working any more, not only in the new handlers, but not even in the main window, and I don't see the connection.
Not working how? Do you have a cursor defined for the window class or have you set it to NULL? Also, how have you subclassed the control? Mark
"Posting a VB.NET question in the C++ forum will end in tears." Chris Maunder
-
Vancouver wrote:
Plus, my SetCursor is not working any more, not only in the new handlers, but not even in the main window, and I don't see the connection.
Not working how? Do you have a cursor defined for the window class or have you set it to NULL? Also, how have you subclassed the control? Mark
"Posting a VB.NET question in the C++ forum will end in tears." Chris Maunder
As I posted, it worked yesterday, before I subclassed the control, and it is not working any more. I can't claim, that the subclassing is to blame, as it is not working in the main window either. The questions indicate, that there is no point to discuss this subject here and now. I have to work backwards and see, at which point the problem appears respectively disappears.
-
As I posted, it worked yesterday, before I subclassed the control, and it is not working any more. I can't claim, that the subclassing is to blame, as it is not working in the main window either. The questions indicate, that there is no point to discuss this subject here and now. I have to work backwards and see, at which point the problem appears respectively disappears.
Vancouver wrote:
The questions indicate, that there is no point to discuss this subject here and now. I have to work backwards and see, at which point the problem appears respectively disappears.
Cool. I would start with just an empty, CStatic-derived class - with just the constructor implemented. Create objects of the derived type to encapsulate the CStatic controls in the window. Everything should work normally at that point. If not, then the problem is elsewhere - maybe an existing problem has been exposed. Once it works like that, add the mouse button handlers to the derived class. Initially, your implementation can just call the base class implementation. Once that is done, you'd probably simply need to notify the parent window of the clicks - via a message, member method, etc. That should be the extent of the subclassing necessary for the controls :) Mark
"Posting a VB.NET question in the C++ forum will end in tears." Chris Maunder
-
Vancouver wrote:
The questions indicate, that there is no point to discuss this subject here and now. I have to work backwards and see, at which point the problem appears respectively disappears.
Cool. I would start with just an empty, CStatic-derived class - with just the constructor implemented. Create objects of the derived type to encapsulate the CStatic controls in the window. Everything should work normally at that point. If not, then the problem is elsewhere - maybe an existing problem has been exposed. Once it works like that, add the mouse button handlers to the derived class. Initially, your implementation can just call the base class implementation. Once that is done, you'd probably simply need to notify the parent window of the clicks - via a message, member method, etc. That should be the extent of the subclassing necessary for the controls :) Mark
"Posting a VB.NET question in the C++ forum will end in tears." Chris Maunder
Mark, I have to disappoint you. I am in the middle(?) of a program, many thousands of code lines. I don't intend to go back in time and in code. I had come to the idea, that it would be nice to have a feature controlled with the mouse button hold down. (No, I don't need any suggestions, how to realize that. I only need "my cursor" back.)
-
Mark, I have to disappoint you. I am in the middle(?) of a program, many thousands of code lines. I don't intend to go back in time and in code. I had come to the idea, that it would be nice to have a feature controlled with the mouse button hold down. (No, I don't need any suggestions, how to realize that. I only need "my cursor" back.)
Ok no problem :) There's lots of us here that can help with the cursor problem if needed! Good luck! Mark
"Posting a VB.NET question in the C++ forum will end in tears." Chris Maunder