Member 13089825 Ответов: 1

Можем ли мы обновить значения в CREATESTRUCT


я храню значения в resgistery при закрытии приложения и при перезапуске приложения я получаю значения из registery (значения приходят правильно) и те значения, которые я хочу обновить в CREATESTRUCT

но значения не обновляются в
CREATESTRUCT


Что я уже пробовал:

LPTSTR p = Width.GetBuffer(dwLen / sizeof(TCHAR));
        //Read TargetServer value from registry
        LSTATUS lStatus = ::RegQueryValueEx(hPathKey, _T("Width"), NULL, &dwtype, (LPBYTE)Width.GetBuffer(MAX_PATH), &nBytes);
        if (ERROR_SUCCESS == lStatus)
        {
            //m_ConnectServerVal.ReleaseBuffer();
        }
        else {
            dwLastError = GetLastError();
        }
        //Read TargetPort value from registry
        nBytes = (MAX_PATH) * sizeof(TCHAR);
        lStatus = ::RegQueryValueEx(hPathKey, _T("Height"), NULL, &dwtype, (LPBYTE)Height.GetBuffer(MAX_PATH), &nBytes);
        if (ERROR_SUCCESS == lStatus)
        {
           // m_ConnectPortVal.ReleaseBuffer();
        }
        else {
            dwLastError = GetLastError();
        }




cs.cy = _tstoi(Height); / / здесь значение идет 786,и сохраняем его в cs
cs.cx = _tstoi(Width); / / ширина равна 1214
and  storing it in cs

if (! CFrameWndEx:: PreCreateWindow(cs) )
но после этой строки executipon значения обновляются, это означает, что здесь, когда я отлаживаю его показ выше avlues(786,1214) не приходит сюда.
не могли бы вы сказать мне, если здесь что-то не так

Richard MacCutchan

Во-первых, почему вы храните целочисленные значения в виде строк? Во-вторых, где этот код на самом деле называется?

Member 13089825

Во первых почему вы храните целочисленные значения в виде строк
В registery мы можем хранить его как строку только так, чтобы из registery я получал это значение (то есть строковый тип) и строчил его в CS
этот код будет вызван в BOOL CMainFrame:: PreCreateWindow(CREATESTRUCT& cs)
{

}

Richard MacCutchan

Нет, вы можете хранить как любой тип в реестре; см. документацию.
Согласно с CWnd:: PreCreateWindow (MFC)[^] в этот момент Вы должны иметь возможность изменить размер окна. вам нужно использовать свой отладчик, чтобы увидеть, что происходит.

1 Ответов

Рейтинг:
0

Jochen Arndt

Общим местом для восстановления размера окна является OnCreate или ShowWindow (при первом вызове) вместо PreCreateWindow. Это может быть использовано для изменения класса или стиля окна, но размер и положение окна могут быть изменены другими функциями до того, как окно будет показано в первый раз или даже когда ShowWindow называется с определенными состояниями.

Вы также можете позвонить CWnd::SetWindowPlacement или CWnd::SetWindowPos как раз перед звонком ShowWindow в InitInstance (или создайте функцию-член для вашего основного класса фрейма, которая делает все это и вызывается из InitInstance вместо ShowWindow).

Кстати: почему вы храните целочисленные значения в виде строк в реестре?
С MFC просто используйте CWinApp::WriteProfileInt и CWinApp::GetProfileInt после вызова SetRegistryKey в InitInstance.