Тема: Помилка ,,error C2377: WNDCLASSEX: переопределение; typedef нельзя пер
Доброго часу доби! У мене в проэкті був файл
// Test.cpp: определяет точку входа для приложения.
//
#include "stdafx.h"
#include "Test.h"
//..#include "windows.h"
// LPSTR строка с именем lpCmdLine. Она используется в том случае, если мы запускаем окно через командную строку с прописью параметров.
//nCmdShow целочисленный, определяет способ показа окна. Нужен для функции ShowWindow, которая будет описана позже. Например, с помощью него мы можем развернуть окно на весь экран, сделать его определённой высоты, прозрачным или поверх остальных.
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
FILE *fp;
if((fp=fopen("test", "wb"))==NULL) {
printf("He удается открыть файл.\n");
exit(1);
}
fprintf(fp, "Это тест %d %f", 10, 20.01);
fclose(fp);
return (0);
}
/*int MessageBox(HWND hWnd, // дескриптор родительского окна LPCTSTR lpText, // указатель на строку с сообщением LPCTSTR lpCaption, // указатель на строку с текстом заголовка UINT uType);// флаги для отображения кнопок, стиля пиктограммы и прочее
*/
Скомпілювалося, экзэшник створював та записував файл.
Читаю статтю, в ній написано
{{{{{Объявление этого класса в windows.h выглядит так:
struct tagWNDCLASSEX{
UINT cbSize; // величина структуры (в байтах)
UINT style; // стиль класса окошка
WNDPROC WndProc; // указатель на имя пользовательской функции
int cbWndExtra; // число освобождаемых байтов в конце структуры
int cbClsExtra; // число освобождаемых байтов при создании экземпляра приложения
HICON hIcon; // дескриптор значка
HICON hIconMini; // .... маленького значка (в трэе)
HCURSOR hCursor; // .... курсора мыши
HBRUSH hbrBack; // .... цвета фона окошка
HINSTANCE hInst; // .... экземпляра приложения
LPCTSTR lpszClassName; // указатель на const-строку, содержащюю имя класса
LPCTSTR lpszMenuName; // указатель на const-строку, содержащюю имя меню, применяемого для класса
}WNDCLASSEX;
То есть мы должны создать переменную типа WNDCLASSEX, обычно это wc, затем через неё инициализировать поля класса, примерно так:
// создавали дескриптор окна WNDCLASSEX wc;
// создаём экземпляр, для обращения к членам класса
WNDCLASSEX wc.cbSize = sizeof(wc); // размер структуры (в байтах) wc.lpfnWndProc = WndProc; // указатель на пользовательскую функцию // и т.д.
Это необходимо, чтобы использовать этот класс в дальнейшем (если мы захотим). Это будет шаблоном для создания кучи окон. Конечно, на первых порах нам не нужно столько окошек. Но регистрация нужна однозначно! Это — формальная сторона.
}}}}}}
Я додав
HWND hMainWnd;//моє-вікно
struct tagWNDCLASSEX{
UINT cbSize; // величина структуры (в байтах)
UINT style; // стиль класса окошка
WNDPROC WndProc; // указатель на имя пользовательской функции
int cbWndExtra; // число освобождаемых байтов в конце структуры
int cbClsExtra; // число освобождаемых байтов при создании экземпляра приложения
HICON hIcon; // дескриптор значка
HICON hIconMini; // .... маленького значка (в трэе)
HCURSOR hCursor; // .... курсора мыши
HBRUSH hbrBack; // .... цвета фона окошка
HINSTANCE hInst; // .... экземпляра приложения
LPCTSTR lpszClassName; // указатель на const-строку, содержащюю имя класса
LPCTSTR lpszMenuName; // указатель на const-строку, содержащюю имя меню, применяемого для класса
} WNDCLASSEX;
WPARAM Miwkn0(){
// То есть мы должны создать переменную типа WNDCLASSEX, обычно это wc, затем через неё инициализировать поля класса, примерно так:
// создавали дескриптор окна
WNDCLASSEX wc; // создаём экземпляр, для обращения к членам класса WNDCLASSEX
wc.cbSize = sizeof(wc); // размер структуры (в байтах)
wc.lpfnWndProc = WndProc; // указатель на пользовательскую функцию // и т.д.
//ATOM WINAPI RegisterClassEx(const WNDCLASSEX *lpWindowClass);
// регистрировали класс
if(!RegisterClassEx(&wc))
{ // в случае отсутствия регистрации класса:
MessageBox(NULL,
L"Не получилось зарегистрировать класс!",
L"Ошибка", MB_OK);
return NULL; // возвращаем, следовательно, выходим из WinMain
} // и т.д.
// проверяли, зарегистрирован ли класс
hMainWnd = CreateWindow(szClassName, // имя класса
L"Полноценная оконная процедура", // имя окна (то что сверху)
WS_OVERLAPPEDWINDOW | WS_VSCROLL, // режимы отображения окошка
CW_USEDEFAULT, // положение окна по оси х (по умолчанию)
NULL, // позиция окна по оси у (раз дефолт в х, то писать не нужно)
CW_USEDEFAULT, // ширина окошка (по умолчанию)
NULL, // высота окна (раз дефолт в ширине, то писать не нужно)
HWND(NULL), // дескриптор родительского окошка (у нас нет род. окон)
NULL, // дескриптор меню (у нас его нет)
HINSTANCE(hInst), // .... экземпляра приложения
NULL); // ничего не передаём из WndProc
// и т.д.
// создали окно if(!hMainWnd){
// в случае некорректного создания окна (неверные параметры и тп):
MessageBox(NULL, L"Не получилось создать окно!",
L"Ошибка", MB_OK);
return NULL; // выходим из приложения }
// и т.д.
// проверяли, создано ли окно
ShowWindow(hMainWnd, nCommandShow);
UpdateWindow(hMainWnd); // и т.д.
/*Первая функция отображает окно на экране ПК. Её первый параметр – дескриптор окошка (он возвращался CreateWindow()). Второй параметр – стиль отображения. При первом запуске окна должен быть равен последнему параметру функции WinMain(), а в последующие разы можно вписывать свои данные (об этом в следующих статьях).
*/
// показывали, обновляли окно
while(GetMessage(&msg, NULL, NULL, NULL)){
TranslateMessage(&msg);
DispatchMessage(&msg); }
return msg.wParam; // всё!
}
При спробі компіляції помилка
WNDCLASSEX: переопределение; typedef нельзя перегрузить другим символом c:\documents and settings\димон\рабочий стол\всяке\порівнювач\файлосоюз\test\test\windows.h 17 1 Test
Це нормально, така помилка? Це повязано з чим - це особливості WNDCLASSEX- у чи я оголошую його не там де потрібно чи що?