Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Невозможно Создать Окно, не соэдаётся. 
V
    Опции темы
Logree
Дата 22.7.2009, 01:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 331
Регистрация: 22.11.2006
Где: Самара

Репутация: нет
Всего: 2



Делал по книжке "Азбука WinAPI" Компилил в minGW, С чем может быть связано: MessageBox - НЕвозможно Создать ОКНО?

Код

#include "windows.h"
#include "tchar.h"

LRESULT CALLBACK HWwindowProc(HWND hWnd,UINT Message,UINT wParam,LONG lParam) 
{
HDC hDC;
PAINTSTRUCT PaintStruct;
RECT Rect;
switch (Message) {
case WM_PAINT:
    hDC = BeginPaint(hWnd,&PaintStruct);
    GetClientRect(hWnd,&Rect);
    DrawText(hDC,_TEXT("Х О Р О Ш О"),-1,&Rect,
             DT_SINGLELINE|DT_CENTER|DT_VCENTER);
    EndPaint(hWnd,&PaintStruct);
    return 0;
}
return DefWindowProc(hWnd,Message,wParam,lParam);
}    
int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR CmdParam,
                   int nCmdShow) 
{
    HWND hWindow;
    WNDCLASS WClass;
    MSG Msg; 
    TCHAR ProgramName[] = "Моя программа";
    WClass.style = CS_HREDRAW|CS_VREDRAW;
    WClass.lpfnWndProc = HWwindowProc;
    WClass.cbClsExtra = 0;
    WClass.hInstance = hInstance;
    WClass.hIcon = LoadIcon(NULL,IDI_APPLICATION);
    WClass.hCursor = LoadCursor(NULL,IDC_ARROW);
    WClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    WClass.lpszMenuName = NULL;
    WClass.lpszClassName = ProgramName;
    
    if (!RegisterClass(&WClass)) {
        MessageBox(NULL,_TEXT("НЕВОЗМОЖНО СОЗДАТЬ КЛАСС"),_TEXT("Error"),MB_OK);
        return 0;
    }
    hWindow = CreateWindow(ProgramName,_TEXT("FirstProgram"),
                           WS_OVERLAPPEDWINDOW,
                           CW_USEDEFAULT,CW_USEDEFAULT,
                           CW_USEDEFAULT,CW_USEDEFAULT,
                           NULL,NULL,
                           hInstance,NULL);
    if (!hWindow) {
        MessageBox(NULL,_TEXT("НЕВОЗМОЖНО СОЗДАТЬ ОКНО"),_TEXT("ERROR"),MB_OK);
        return 0;
    }        
    ShowWindow(hWindow,nCmdShow);
    UpdateWindow(hWindow);
    
    while(GetMessage(&Msg,NULL,0,0)) {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }
    return Msg.wParam;
}



--------------------
Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд.
PM MAIL ICQ   Вверх
GremlinProg
Дата 22.7.2009, 01:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



пробовал менять имя класса на латиницу?

"Моя программа" -> "MyProgram"


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Logree
Дата 22.7.2009, 01:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 331
Регистрация: 22.11.2006
Где: Самара

Репутация: нет
Всего: 2



Я Это первым делом сделал smile Не помогло... даже _TEXT прилепил и всё равно не хочет работать.


--------------------
Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд.
PM MAIL ICQ   Вверх
GremlinProg
Дата 22.7.2009, 02:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



перед вызовом RegisterClass добавь:
Код

WClass.cbWndExtra = 0;



--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Emura
Дата 22.7.2009, 02:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 7.2.2009

Репутация: 1
Всего: 1



Logree, пробуй так, может поможет

Код

hWindow = CreateWindow(ProgramName,_TEXT("FirstProgram"),
                           WS_OVERLAPPEDWINDOW,
                           CW_USEDEFAULT,CW_USEDEFAULT,
                           CW_USEDEFAULT,CW_USEDEFAULT,
                           NULL, (HMENU)NULL,
                           hInstance,NULL);


и лучше сразу приучаться занулять переменные,потом меньше хлопот.

как вообще отлавливать ошибку таким способом

Код

if (!hWindow) {
        MessageBox(NULL,_TEXT("НЕВОЗМОЖНО СОЗДАТЬ ОКНО"),_TEXT("ERROR"),MB_OK);


если hWindow не занулен... smile 

Код

HWND hWindow =NULL;




Это сообщение отредактировал(а) Emura - 22.7.2009, 02:06
PM   Вверх
Logree
Дата 22.7.2009, 02:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 331
Регистрация: 22.11.2006
Где: Самара

Репутация: нет
Всего: 2



Цитата

  WClass.cbWndExtra = 0;

Действительно smile  пропустил пока печатал... Спасибо.

Цитата

HWND hWindow =NULL;
 Учтём.

Это нормально если после закрытия окна по крестику окно закрывается а програма не выгружается из памяти? приходиться через диспетчер задачь завершать.



--------------------
Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд.
PM MAIL ICQ   Вверх
GremlinProg
Дата 22.7.2009, 02:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(Logree @  22.7.2009,  04:25 Найти цитируемый пост)
Это нормально если после закрытия окна по крестику окно закрывается а програма не выгружается из памяти? приходиться через диспетчер задачь завершать.

нет, это не нормально,
добавь обработчик:
Код

case WM_DESTROY:
  PostQuitMessage(S_OK);
  break;



--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Emura
Дата 22.7.2009, 02:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 7.2.2009

Репутация: 1
Всего: 1



смотря что требуется от программы... в большинстве случаев не нормально smile 

в кратце: необходимо отлавливать сообщение закрытия и делать то что требуется.

GremlinProg, опередил )


Это сообщение отредактировал(а) Emura - 22.7.2009, 02:29
PM   Вверх
Logree
Дата 22.7.2009, 02:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 331
Регистрация: 22.11.2006
Где: Самара

Репутация: нет
Всего: 2



Ну я так и думал smile


--------------------
Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0736 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.