2013-02-07 74 views
-3

的關鍵我有Windows的一個std ::地圖,例如:C++ - 地圖 - 獲得這個價值

class MyWindow 
{ 
public: 
    MyWindow() 
    { 
     CreateWindow(...); 
    } 
    ... // rest of code 
} 

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 
{ 
    switch (message) 
    { 
     // code 
    } 
} 

std::map<string, MyWindow> windows; 

而且WndProc的功能,我想知道哪個窗口是現在在函數內部,我怎樣才能得到這個窗口的關鍵。

+1

迭代時,windows-> first? – Rapptz

+0

我在WndProc函數裏面我想知道哪個窗口現在在函數中 – user1544067

+0

我不明白你爲什麼要使用'std :: map'。 – Rapptz

回答

0

你可以使用SetWindowLongPtr的指針存儲對象(this如果您要創建一個類方法的窗口),對於一個給定HWND。使用GWLP_USERDATA作爲nIndex的參數。

這樣,你完全不需要地圖:當你有一個窗口句柄時,GetWindowLongPtr就足以得到一個對象。

1

如果MyWindow包含窗口句柄(HWND),那麼您可以使用例如, std::find_if找到實例。

喜歡的東西:

HWND hWnd; // The window handle to look for 

auto windowIterator = std::find_if(std::begin(windows), std::end(windows), 
    [hWnd](const std::map<std::string, MyWindow>::value_type& p) -> bool { 
     return (p.first.getNativeWindowHandle() == hWnd); 
    }); 
if (windowIterator != std::end(windows)) 
{ 
    // `windowIterator` now "points" to the window 
} 
0

你可以做一個強力搜索地圖:

auto it = std::find_if(windows.begin(), windows.end(), 
         [this](std::pair<std::string const, MyWindow> const & p) -> bool 
         { return p.second == *this; }); 

if (it == windows.end()) { /* not found */ } 
else      { /* window key is it->first */ } 

如果對象是獨一無二的,你可能也可以說&p.second == this的比較。

+0

您是不是指'std :: find_if'? :) –

+0

@JoachimPileborg:是的,謝謝! –