title: Subclass a button within a custom class using SetWindowSubclass
body: <p>I am attempting to write a class to handle the creation of a button and it's messages internally.  I wish to keep all of the code contained within the class itself.  This may be simple or impossible as I am relatively new to Winapi and C++, having used vb.net much more extensively.  I was unable to find an example that accomplished this seeming simple conversion.  I did find examples suggesting i use an alternate API, or use SetWindowLongPtr, I am told that SetWindowSubclass is the better option.  My attempted code is below:</p>
  
  <pre><code>#pragma once
  #include &lt;iostream&gt;
  #include &lt;Windows.h&gt;
  #include &lt;Commctrl.h&gt;
  
  using namespace std;
  
      class button {
      public:
          bool initialize();
          buttton(int x, int y, int length, int width, LPCWSTR text, HWND parent, HINSTANCE hInstance);  // This is the constructor
  
      private:
          LPCWSTR text = L"Button";
          int height = 25;
          int width = 100;
          int x = 0;
          int y = 0;
          HWND parent;
          HWND thisHandle;
          HINSTANCE thisInstance;
          bool initialized = false;
          LRESULT CALLBACK mySubClassProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData);
  
      };
  
  
      button::button(int x, int y, int height, int width, LPCWSTR text, HWND parent, HINSTANCE hInstance) {
          this-&gt;x = x;
          this-&gt;y = y;
          this-&gt;height = height;
          this-&gt;width = width;
          this-&gt;text = text;
          this-&gt;parent = parent;
          thisInstance = hInstance;
      }
          bool button::initialize()
      {
          thisHandle = CreateWindowW(
              L"BUTTON",  // Predefined class; Unicode assumed 
              text,      // Button text 
              WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON | WS_CLIPSIBLINGS | BS_NOTIFY,  // Styles 
              x,         // x position 
              y,         // y position 
              width,        // Button width
              height,        // Button height
              parent,     // Parent window
              NULL,       // No ID.
              thisInstance,
              NULL);      // Pointer not needed.
          if (!thisHandle)
          {
              return false;
          }
          initialized = true;
          //Problem Code****
          SetWindowSubclass(thisHandle, mySubClassProc, 1, 0);
          //****  
          return true;
      }
  
      LRESULT CALLBACK button::mySubClassProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData) {
  
          //Code handling messages here.
      }
  }
  </code></pre>
  
  <p>This throws the error :</p>
  
  <blockquote>
    <p>argument of type "LRESULT (__stdcall button::*)(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData)" is incompatible with parameter of type "SUBCLASSPROC"</p>
  </blockquote>
  
  <p>I am hoping that someone can explain a simple solution, or suggest an alternative in Winapi, as i wish to learn native windows and C++ and not rely on additional libraries.  </p>