Регистрация класса окна (Doc/View)
От: cadko  
Дата: 13.11.02 04:25
Оценка:
Мне нодо поставить свое имя класса окна, вместо того, что стоит по умолчанию (AfxFrameOrView42d).
Программа на архитектуре документ/представление.

Я пробовал заменить имя класса в PreCreateWindow(...),
но после запуска моя программа выдает системное сообщение — "Не могу создать документ" и вылетает.
Re: Регистрация класса окна (Doc/View)
От: Patalog Россия  
Дата: 13.11.02 05:48
Оценка:
Здравствуйте cadko, Вы писали:

C>Мне нодо поставить свое имя класса окна, вместо того, что стоит по умолчанию (AfxFrameOrView42d).

C>Программа на архитектуре документ/представление.

C>Я пробовал заменить имя класса в PreCreateWindow(...),

C>но после запуска моя программа выдает системное сообщение — "Не могу создать документ" и вылетает.

Перекрой Create своего наследника.
RTFM RegisterClass\RegisterClassEx
Почетный кавалер ордена Совка.
Re: Регистрация класса окна (Doc/View)
От: Dejavu Беларусь  
Дата: 13.11.02 17:58
Оценка:
Здравствуйте cadko, Вы писали:

C>Я пробовал заменить имя класса в PreCreateWindow(...),

C>но после запуска моя программа выдает системное сообщение — "Не могу создать документ" и вылетает.


У меня тоже было так в в PreCreateWindow
Покопавшись в МСДНЕ я нашел следующее

INFO: MFC 4.0 No Longer Pre-Registers Window Classes
ID: Q140596
......
BOOL CYourWinApp::InitInstance()
{
    // Add the following code to your override of InitInstance.
    // Make sure that this code run before you create any
    // windows that use this new window class

    WNDCLASS wndclass;

    wndclass.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc = ::DefWindowProc;
    wndclass.cbClsExtra = 0;
    wndclass.cbWndExtra = 0;
    wndclass.hInstance = AfxGetInstanceHandle();
    wndclass.hIcon = LoadIcon(IDR_MAINFRAME);
                     // or load a different icon
    wndclass.hCursor = LoadCursor( IDC_ARROW );
    wndclass.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1);
    wndclass.lpszMenuName = NULL;
    wndclass.lpszClassName = "MyAfxFrameOrView";

    if( !AfxRegisterClass( &wndclass ))
      {
        TRACE("Window class MyAfxFrameOrView could not be
               registered.\n");
        return FALSE;
      }

}


Вот, собственно говоря, и все — и это работает. Теперь можно создавать любые окна с классом MyAfxFrameOrView.
(Чего я так и не понял — почему здесь написано про lpfnWndProc, что "You should always make it ::DefWindowProc.", а в [TN001: Window Class Registration] — "must be AfxWndProc", хотя и то и другое работает)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.