First, you probably have a main message loop somewhere that dispatches messages to every window (and dialog), not only to a specified window:
// global variable, it contains the handle of all dialogs
// your main loop somewhere near your main()
while (::GetMessage(&msg, NULL, 0, 0))
// copying the global array because it might be modified during iteration
// and we iterate over the copy...
bool was_dialog_message = false;
for (size_t i=0,e=dialogs.size(); i<e; ++i)
if (::IsWindow(dialogs[i]) && ::IsDialogMessage(dialogs[i], &msg))
was_dialog_message = true;
When you want a modeless dialog, you just create it with CreateDialog(), put its handle to g_Dialogs and thats it. You don't have to run a local message loop like with modal messageboxes, especially not with a specified single window handle (m_hWnd). A modeless dialog works almost like a normal window that you created with CreateWindowEx(), you just have to handle it a bit specially with IsDialogMessage(). In a modeless multi-windowed gui program its always enough one message loop - the main message loop pumps the messages for all modeless windows.
EDIT: warning: while you are iterating over the g_Dialogs vector, the contents of the vector might change because you dispatch messages to dialogs that can respond to those messages by creating/deleting dialogs! To avoid bugs caused by this you either use a custom container that can be modified during iteration or solve it somehow else. One good solution can be copying the vector before iteration and iterating on the copied vector, still some HWNDs might become invalid during iteration so before IsDialogMessage() it might be wise to call IsWindow() on the handles.
Hey, thanks for your reply. My problem was that i couldn't find a way to put the whole thing into nice C++ class of my own. But, problem was solved by using CreateDialogParam instead. So i can pass a pointer to the dialog class to a main message loop so i can call my own virtual methods inside children classes.
I though that your problem is the messagebox because your loop was inside the DoModeless() method. Anyway, your previous hooking is also fine, you just miss a few messages that come before the return of your CreateDialog() call and you have to handle uninitialized GWLP_USERDATA cases as well. Even if you initialize userdata from WM_INITDIALOG it might be better to handle uninitialized cases, who knows what the future brings?
EDIT: The trick is simple: the sendto address is in the header of the datagram you received, but your recvfrom returns just the payload from that and the address of the sender. You need a method to reach other fields of the received UDP packet header, one way is using raw sockets.
Programs under windows need administrator privilege must get user's permission when they start. And they can also run with administrator privilege by right click the EXE and select "Run as Administrator". But, before the EXE start, a message box will show up. It's really disgusting.
Now I want my application to run as the Administrator, and I don't want the popup message box when user click the EXE file.
Now I wonder whether AdjustTokenPrivileges can help me achieve this.
1. This program displays a running counter starting from 0 till infinity. The counter starts/resets by pressing enter and stops by pressing some other key. Use as many define directives and macros to achieve this task. The counter when played should be like a real counter (no separate line should be used for the
next counter increment). Hint: use clrscr() command inside the for loop.
Please try and do your own homework. If you get stuck on a particular part of the code then post a question here, but do not expect others to provide an entire solution without any effort on your part.
One of these days I'm going to think of a really clever signature.
I can predict the next posting... "I ran your code and it never reached infinity what could the problem be?"
Why is common sense not common?
Never argue with an idiot. They will drag you down to their level where they are an expert.
Sometimes it takes a lot of work to be lazy
Please stand in front of my pistol, smile and wait for the flash - JSOP 2012
Last Visit: 31-Dec-99 18:00 Last Update: 1-Aug-14 12:28