Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. WM_KILLFOCUS problem

WM_KILLFOCUS problem

Scheduled Pinned Locked Moved C / C++ / MFC
questionhelp
22 Posts 4 Posters 1 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • D danginkgo

    I tried but it doesn't work. For WM_SETFOCUS and WM_KILLFOCUS , the wParam is not the main window HWND. Ex. wParam = 0x000209fc This->hwndView = 0x000209ee hWnd = 0x000209ee (HWND parameter of WindowProc) So, I can't register and unregister if I get those messages.

    danginkgo

    S Offline
    S Offline
    SandipG
    wrote on last edited by
    #10

    did you manage to get it working it or not can you paste some code snippets for the same.

    Regards, Sandip.

    D 3 Replies Last reply
    0
    • S SandipG

      did you manage to get it working it or not can you paste some code snippets for the same.

      Regards, Sandip.

      D Offline
      D Offline
      danginkgo
      wrote on last edited by
      #11

      This is the callback function for the main (view) window: LRESULT CALLBACK FldViewWndProc (HWND hWnd, UINT wMessage, WPARAM wParam, LPARAM lParam){ PluginInstance* This; ................................................ case WM_KILLFOCUS: This = (PluginInstance*) GetWindowLong(hWnd, 0); if((HWND)wParam==This->hwndView) register hotkeys break; case WM_SETFOCUS: This = (PluginInstance*) GetWindowLong(hWnd, 0); if((HWND)wParam==This->hwndView) unregister hotkeys break; .................................................. }

      danginkgo

      S 1 Reply Last reply
      0
      • D danginkgo

        This is the callback function for the main (view) window: LRESULT CALLBACK FldViewWndProc (HWND hWnd, UINT wMessage, WPARAM wParam, LPARAM lParam){ PluginInstance* This; ................................................ case WM_KILLFOCUS: This = (PluginInstance*) GetWindowLong(hWnd, 0); if((HWND)wParam==This->hwndView) register hotkeys break; case WM_SETFOCUS: This = (PluginInstance*) GetWindowLong(hWnd, 0); if((HWND)wParam==This->hwndView) unregister hotkeys break; .................................................. }

        danginkgo

        S Offline
        S Offline
        SandipG
        wrote on last edited by
        #12

        are you getting the same values in both cases you mentioned in your previous reply.

        Regards, Sandip.

        D 1 Reply Last reply
        0
        • S SandipG

          did you manage to get it working it or not can you paste some code snippets for the same.

          Regards, Sandip.

          D Offline
          D Offline
          danginkgo
          wrote on last edited by
          #13

          In the documentation I found that the wParam for WM_KILLFOCUS is the window handler for the window that receive focus, so I'll get this message in the WindowProc function if I click on the main window. So, I can't use this message, because I want to unregister the hotkeys when the main window loses focus, not immediately before it gains focus. Is it wright what I wrote?

          danginkgo

          modified on Tuesday, June 24, 2008 7:31 AM

          1 Reply Last reply
          0
          • S SandipG

            are you getting the same values in both cases you mentioned in your previous reply.

            Regards, Sandip.

            D Offline
            D Offline
            danginkgo
            wrote on last edited by
            #14

            yes, the same values

            danginkgo

            1 Reply Last reply
            0
            • S SandipG

              did you manage to get it working it or not can you paste some code snippets for the same.

              Regards, Sandip.

              D Offline
              D Offline
              danginkgo
              wrote on last edited by
              #15

              The problem is I don't get any message in WindowProc if the window loses focus.

              danginkgo

              S 1 Reply Last reply
              0
              • D danginkgo

                The problem is I don't get any message in WindowProc if the window loses focus.

                danginkgo

                S Offline
                S Offline
                SandipG
                wrote on last edited by
                #16

                Hi I tried it in a sample application 1> Main window with two edit controls. 2> In WM_LBUTTONDOWN i called SetFocus(hWnd); I noticed is that if i dont call setfocus explicitly i dont get the WM_SETFOCUS notification. and moreover when i switch between the two edit control i dont get any notification. may be you can try something like following. i dont see any need of using GetWindowLong. case WM_LBUTTONDOWN: SetFocus(hWnd); break; case WM_KILLFOCUS: unregisterkeys; break; case WM_SETFOCUS: registerkeys; break; I hope it helps.

                Regards, Sandip.

                D 2 Replies Last reply
                0
                • S SandipG

                  Hi I tried it in a sample application 1> Main window with two edit controls. 2> In WM_LBUTTONDOWN i called SetFocus(hWnd); I noticed is that if i dont call setfocus explicitly i dont get the WM_SETFOCUS notification. and moreover when i switch between the two edit control i dont get any notification. may be you can try something like following. i dont see any need of using GetWindowLong. case WM_LBUTTONDOWN: SetFocus(hWnd); break; case WM_KILLFOCUS: unregisterkeys; break; case WM_SETFOCUS: registerkeys; break; I hope it helps.

                  Regards, Sandip.

                  D Offline
                  D Offline
                  danginkgo
                  wrote on last edited by
                  #17

                  My code is exactly like what you wrote. The problem is I don't get the WM_KILLFOCUS message only when I return to the app window. If the focus is on the app window and I go to other window then I don't get any message.

                  danginkgo

                  S 1 Reply Last reply
                  0
                  • D danginkgo

                    My code is exactly like what you wrote. The problem is I don't get the WM_KILLFOCUS message only when I return to the app window. If the focus is on the app window and I go to other window then I don't get any message.

                    danginkgo

                    S Offline
                    S Offline
                    SandipG
                    wrote on last edited by
                    #18

                    No when i go from app window to edit control i get the WM_KILLFOCUS notifiction. also when i call SetFocus() i do get WM_SETFOCUS notification.

                    Regards, Sandip.

                    1 Reply Last reply
                    0
                    • S SandipG

                      Hi I tried it in a sample application 1> Main window with two edit controls. 2> In WM_LBUTTONDOWN i called SetFocus(hWnd); I noticed is that if i dont call setfocus explicitly i dont get the WM_SETFOCUS notification. and moreover when i switch between the two edit control i dont get any notification. may be you can try something like following. i dont see any need of using GetWindowLong. case WM_LBUTTONDOWN: SetFocus(hWnd); break; case WM_KILLFOCUS: unregisterkeys; break; case WM_SETFOCUS: registerkeys; break; I hope it helps.

                      Regards, Sandip.

                      D Offline
                      D Offline
                      danginkgo
                      wrote on last edited by
                      #19

                      It works now. It seems that the problem was that I called MessageBox() function in my code with wrong HWND. That massed up the messages. I took it out of the code and it works fine. Thank you very much for your help.

                      danginkgo

                      S 1 Reply Last reply
                      0
                      • D danginkgo

                        It works now. It seems that the problem was that I called MessageBox() function in my code with wrong HWND. That massed up the messages. I took it out of the code and it works fine. Thank you very much for your help.

                        danginkgo

                        S Offline
                        S Offline
                        SandipG
                        wrote on last edited by
                        #20

                        Good its working now You are welcome :).

                        Regards, Sandip.

                        1 Reply Last reply
                        0
                        • D danginkgo

                          In the main window callback function I get the WM_KILLFOCUS message when I click on the window, and only then I get the WM_SETFOCUS message. Is that OK? I thought that WM_KILLFOCUS message is sent to a window immediatly before it looses focus. I want to register some values when the window has keyboard focus and unregister the values when the window looses focus. How can I do that?

                          danginkgo

                          D Offline
                          D Offline
                          David Crow
                          wrote on last edited by
                          #21

                          danginkgo wrote:

                          I want to register some values when the window has keyboard focus and unregister the values when the window looses focus.

                          It sounds like you need to use WM_ACTIVATEAPP instead.

                          "Love people and use things, not love things and use people." - Unknown

                          "To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne

                          D 1 Reply Last reply
                          0
                          • D David Crow

                            danginkgo wrote:

                            I want to register some values when the window has keyboard focus and unregister the values when the window looses focus.

                            It sounds like you need to use WM_ACTIVATEAPP instead.

                            "Love people and use things, not love things and use people." - Unknown

                            "To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne

                            D Offline
                            D Offline
                            danginkgo
                            wrote on last edited by
                            #22

                            I tried using WM_ACTIVATEAPP message, but I don't get it in the main WindowProc function. Do you have any suggestions?

                            danginkgo

                            1 Reply Last reply
                            0
                            Reply
                            • Reply as topic
                            Log in to reply
                            • Oldest to Newest
                            • Newest to Oldest
                            • Most Votes


                            • Login

                            • Don't have an account? Register

                            • Login or register to search.
                            • First post
                              Last post
                            0
                            • Categories
                            • Recent
                            • Tags
                            • Popular
                            • World
                            • Users
                            • Groups