在堆上创建winapi窗口包装器实例

时间:2012-05-22 17:33:12

标签: c++ winapi

我正在尝试找几个小时的解决方案而且我很困惑。我写了一个简单的包装器来创建一个win32窗口。我有一个静态窗口程序。包装器还有一个std :: map存储用于消息处理的函子。窗口过程通过地图发现,如果iretator找到某个消息的仿函数,它会执行仿函数而不是默认的windows过程。当我像这样创建类的对象时

Window window;
window.create();

我没有错误,一切正常。但如果我尝试:

Window* window;
window = new Window("test");
window->create();

我的应用程序崩溃了。从内存中读取时出现访问冲突。问题是 在静态窗口过程函数中。当我开始在地图上进行模仿时,就会发生访问冲突。这是我班级的一些示例代码:

class Window
{
private:

  std::map<unsigned int, Functor*> MessageContainer;

public:

  static LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam)
  {
    // Get a pointer to the window instance from (LPCREATESTRUCT)lParam

    if(instance != 0)
    {
      std::map<unsigned int, Functor*>::iterator it = instance->MessageContainer.find(uMessage);
    }
  } 
};

我缩短了代码以显示关键部分。我的实例指针是有效的,因为我测试了我的窗口类的其他成员并且它工作。只是对容器感到厌倦会产生访问冲突。

我希望有人可以提前帮助和感谢!

0 个答案:

没有答案