Programatically repositioning Common Dialog
Posted on 1997-06-02
I have tried to create a Common Dialog (for testing, a CFileDialog). The problem is that it is always created centered in its owners window (which not necessarily is the window that created it). I have tried to use an overlaid OnInitDialog and also OnInitDone to call SetWindowPos to change its starting position. OnInitDialog made no difference, and OnInitDone strangely enough positioned it in the owner windows upper left corner, but not where I wanted it to be. When I checked the result from a GetWindowRect in OnInitDialog it claimed that the window were 0 in height and 0 in width. In OnInitDone it said that the dialog had a height, but not a width (or if it was the other way around). I even tried to create a timer to call SetWindowPos (I tried MoveWindow too) delayed to a later time, but it gave no result.
The question is simple: how can I programatically position a Common Dialog centered around a point on the screen that I decide ? Preferrably with a global function, say ::AfxSetCommonDialogPos(x, y), that would affect any Common Dialogs created and shown after that (even underived CFileDialog, CPrintDialog, etc.).
I am using Windows NT 4.0 and Microsoft Visual C++ 5.0. The system has two displays, where our program wants to be able to move the Common Dialog away from the middle of the desktop, where it is cut in half between the displays. The program can also be configured to use the displays either horizontally or vertically.
I hope you can help us.