hi
i have a little program that just displays a dialog. now i want to remember the position of the dialog, wenn the user presses next to reach the next dialog and place the new dialog at the same place on the screen. here's my question: how can i get the curent position of the dialog on the screen?
here's some parts of my code:
Code:
#include "installer.h"
#include "dialogs.h"
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
struct DlgStatus sStatus;
//sStatus vorbereiten
sStatus.xScreen=GetSystemMetrics(SM_CXSCREEN);
sStatus.yScreen=GetSystemMetrics(SM_CYSCREEN);
sStatus.pointDlgPos.x=sStatus.xScreen/2;
sStatus.pointDlgPos.y=sStatus.yScreen/2;
//Create Dialog Chain
Dialog = (struct DlgChain *)malloc(sizeof(struct DlgChain));
Dialog->Name = TEXT("Installer_Title");
Dialog->Last = NULL;
Dialog->Next = (struct DlgChain *)malloc(sizeof(struct DlgChain));
Dialog->Next->Name = TEXT("Installer_Contract");
Dialog->Next->Last = Dialog;
Dialog->Next->Next = NULL;
//Installer routine
while(TRUE) {
DialogBoxParam(hInstance,Dialog->Name,NULL,InstallerDlgProc,&sStatus);
if(sStatus.iButton==NEXT) {
//Call Next Dialog
if(Dialog->Next != NULL)
Dialog = Dialog->Next;
}
else if(sStatus.iButton==LAST) {
//Call Last Dialog
if(Dialog->Last != NULL)
Dialog = Dialog->Last;
}
else if(sStatus.iButton==CANCEL) {
//Abort
break;
}
}
return 0;
}
BOOL CALLBACK InstallerDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
static struct DlgStatus *psStatus, sStatus;
switch(message) {
case WM_INITDIALOG:
psStatus=(struct DlgStatus *)lParam;
sStatus=*psStatus;
GetClientRect(hDlg,&(sStatus.rectDialog));
MoveWindow(hDlg,sStatus.pointDlgPos.x-sStatus.rectDialog.right/2, sStatus.pointDlgPos.y-sStatus.rectDialog.bottom/2,
sStatus.rectDialog.right,sStatus.rectDialog.bottom,FALSE);
break;
case WM_COMMAND:
sStatus.xScreen=GetSystemMetrics(SM_CXSCREEN);
sStatus.yScreen=GetSystemMetrics(SM_CYSCREEN);
switch(LOWORD(wParam)) {
case ID_NEXT:
sStatus.iButton=NEXT;
*psStatus=sStatus;
EndDialog(hDlg,TRUE);
break;
case ID_LAST:
sStatus.iButton=LAST;
*psStatus=UpdateStatus(hDlg, sStatus);
EndDialog(hDlg,TRUE);
break;
case ID_CANCEL:
sStatus.iButton=CANCEL;
*psStatus=UpdateStatus(hDlg, sStatus);
EndDialog(hDlg,FALSE);
break;
case ID_END:
sStatus.iButton=CANCEL;
*psStatus=UpdateStatus(hDlg, sStatus);
EndDialog(hDlg,FALSE);
break;
}
break;
}
return 0;
}
struct DlgStatus UpdateStatus(HWND hDlg, struct DlgStatus sStatus)
{
sStatus.xScreen=GetSystemMetrics(SM_CXSCREEN);
sStatus.yScreen=GetSystemMetrics(SM_CYSCREEN);
//ClientToScreen(hDlg,&(sStatus.pointDlgPos));
//Does not work. Get cur pos of dialog here, but how?
return sStatus;
}
thank you