C++ class for capturing broadcast window messages
I haven't worked with WinAPI in years, so I can't help you much with that, but I do have a few concerns regarding style and structure of your code:


What's the meaning of this GUID? Does it have any, or is it just randomly generated?


WNDCLASSW wndcls = {0, wndproc, 0, 0, (HINSTANCE)hmodule, 0, 0, 0, nullptr, 
              L"{F9F40031-F77E-4A5C-8A6C-30296B823C22}"};



A comment explaining why this specific value would be nice. Or better, make it a named constant with a self-explanatory name.
You have several instances of C-style casts in the code. Prefer using the C++ cast operators instead. They will give you warnings and diagnostics for potentially dangerous casts.
This looks very obscure:


CDummyWndClass::operator PCWSTR() const {
  PCWSTR p = nullptr;
  std::memcpy(&amp;p, &amp;atom_, sizeof(atom_));
  return p;
}



On my first look, I thought that you were trying to memcpy into a null pointer. The &amp; on p is not easily spotted without a careful look. If you really must do this, then I think a reinterpret_cast would be more clear about your intentions. I did not test this, but something along the lines of the following should do:

CDummyWndClass::operator PCWSTR() const {
    const std::uintptr_t intVal = static_cast&lt;std::uintptr_t&gt;(atom_);
    PCWSTR ptrVal = reinterpret_cast&lt;PCWSTR&gt;(intVal);
    return ptrVal;
}

It would probably look clearer if you'd lay out that loop inside CWndMsgReceiver construtor is a more spaced way, to give it emphasis. Default { } is always good too:


  do Sleep(0); while (!(HWND)hwnd_);



 do {
     Sleep(0); 
 } while (!(HWND)hwnd_);


You should also comment that this is not an infinite loop, but that it waits on an independent thread to set the variable.
This might be your personal preference, I for one I'm not a big fan of cast operator overloads. I've seen instances when they can produce some pretty obscure code. IMHO, I think your cast operators would look much nicer as plain Get*() methods.
You don't seem to use the wacky Microsoft prefixes on variable names, though you do use the C prefix for class names. Again, this is a subjective point, but I think your class names would be more readable without it.