次のように定義されたメンバー変数があります。
HWNDWindowHandle。
変数をキャプチャしてLambdaで割り当てようとしています。そのため、コンパイラは私に警告を出し、「これ」をキャプチャするように提案しました。私はそうしましたが、ハンドルはLambda:S内でのみ有効です。つまり、Lambdaの外部ではNULLです。
class Foo
{
private:
HWND WindowHandle;
public:
Foo();
void MakeWindow(.......);
HWND GetWindowHandle() {return WindowHandle;};
};
Foo::Foo(){}
Foo::MakeWindow(.......)
{
Thread = std::thread([ClassName, Title, Width, Height, this]{
WindowHandle = CreateWindowEx(0, ClassName.c_str(), Title.c_str(), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, Width, Height, 0, 0, GetModuleHandle(NULL), 0);
if(WindowHandle)
{
ShowWindow(WindowHandle, SW_SHOWDEFAULT);
MSG msg;
while(GetMessage(&msg, 0, 0, 0))
DispatchMessage(&msg);
}
});
}
int main()
{
Foo F;
F.MakeWindow(........);
std::cout<<std::boolalpha<<(F.GetWindowHandle() == NULL); //writes true.
}
上記は完全に素晴らしいウィンドウを作成します!ハンドルがnullであるだけです。ラムダ内からクラスメンバーにハンドルを取得するにはどうすればよいですか?