Мне нодо поставить свое имя класса окна, вместо того, что стоит по умолчанию (AfxFrameOrView42d).
Программа на архитектуре документ/представление.
Я пробовал заменить имя класса в PreCreateWindow(...),
но после запуска моя программа выдает системное сообщение — "Не могу создать документ" и вылетает.
Здравствуйте cadko, Вы писали:
C>Мне нодо поставить свое имя класса окна, вместо того, что стоит по умолчанию (AfxFrameOrView42d).
C>Программа на архитектуре документ/представление.
C>Я пробовал заменить имя класса в PreCreateWindow(...),
C>но после запуска моя программа выдает системное сообщение — "Не могу создать документ" и вылетает.
Перекрой Create своего наследника.
RTFM
RegisterClass\
RegisterClassEx
Здравствуйте 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", хотя и то и другое работает)