Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2010, 12:34   #1
rUs_LAN
Форумчанин
 
Регистрация: 15.11.2008
Сообщений: 577
Печаль Програма компілюється але не появляється на екран

Уже другий день парюсь неможу зрозуміти в чосу помилка компілятор Dev C++

Вот сам код

PHP код:
#include <windows.h> // 165
#include "KWnd.h"
LRESULT CALLBACK mainF(HWNDUINTWPARAMLPARAM);
int WINAPI WinMain(HINSTANCE hInstanceHINSTANCE hPrevInstance,
                   
LPSTR lpCmdLineint nCmdShow)
        {
                   
MSG msg;
                   
KWnd mainWnd("Практика 2010 v0.01",hInstance,nCmdShow,mainF);
                   while(
GetMessage(&msg,NULL,0,0))
                          {
                                           
TranslateMessage(&msg);
                                           
DispatchMessage(&msg);
                          }
                  return 
msg.wParam;
      }     
LRESULT CALLBACK mainF(HWND hWUINT msgWPARAM wPLPARAM lP)
      {
                 
HDC hDC;
                 
PAINTSTRUCT ps;
                 
POINT c//c - центр POIN непонятна структура де є х, у.
                 
RECT r;
                 
//c - центр
                 
int x,y,i;
                 static 
HWND hButton 0;
                 static 
int bx,by;
                 switch(
msg)
                  {
                    
                         case 
WM_SIZE:
                             if(
hButton &&  (wP == SIZEFULLSCREEN || wP ==SIZENORMAL))
                               {
                                      
r.left = (LOWORD(lP) - bx) / 2;
                                      
r.top HIWORD(lP) * by 2;
                                      
MoveWindow(hButtonr.leftr.topbxbytrue);
                               }
                         break;
                         
                         case 
WM_COMMAND:
                             if(
LOWORD(wP) == && HIWORD(wP) == BN_CLICKED && (HWNDlP == hButton)
                                {
                                        
DestroyWindow(hW);
                                }
                              return 
0;
                           break;
                                           
                         case 
WM_PAINT:
                         
                            
TEXTMETRIC tm;
                            
hDC BeginPaint(hW,&ps);
                            
GetClientRect(hW,&r);
                            
                            
c.r.right 2;
                            
c.=r.bottom 2;
                            
x=c.x;
                            
y=c.y;
                            
Ellipse(hDC,x-150,y-150,x+150,y+150);
                           
                            
                            
EndPaint(hW,&ps);
                            
                            break;
                         case 
WM_CREATE:
                             
hDC GetDC(hW);
                             
SelectObject (hDCGetStockObject (SYSTEM_FIXED_FONT));
                             
GetTextMetrics (hDC, &tm); 
                             
bx tm.tmAveCharWidth 30;
                             
by = (tm.tmHeight tm.tmExternalLeading) * 2;
                             
ReleaseDC (hWhDC);
                             
hButton CreateWindow("button","ололо Button",WS_CHILD WS_VISIBLE BS_PUSHBUTTON,
                                                    
00bxbyhW, (HMENU1, ((LPCREATESTRUCTlP) -> hInstanceNULL);
                             return 
0;
                             break; 
                                                      
                         case 
WM_DESTROY:
                              
                         
                            
PostQuitMessage(0);
                            break;
                         default:
                            return 
DefWindowProc (hWmsgwPlP);
                            break;
                  }
      } 

Последний раз редактировалось rUs_LAN; 11.04.2010 в 12:41.
rUs_LAN вне форума Ответить с цитированием
Старый 11.04.2010, 12:56   #2
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

а кто будет регистрировать класс окна? В DevC++ есть уже готовый проект окна. Посмотри его и сравни со своим кодом
NiCola999 вне форума Ответить с цитированием
Старый 11.04.2010, 13:17   #3
rUs_LAN
Форумчанин
 
Регистрация: 15.11.2008
Сообщений: 577
По умолчанию

Цитата:
Сообщение от NiCola999 Посмотреть сообщение
а кто будет регистрировать класс окна? В DevC++ есть уже готовый проект окна. Посмотри его и сравни со своим кодом
Я просто виклав частину коду вікно регіструється в класі Kwnd
Описаний клас в хедері (Kwnd.h) ну викладу його реалізацію але врятлі справа в ньому бо в внших програмах все було ок

Код:
#include "KWnd.h"


  KWnd::KWnd(LPCTSTR windowName, HINSTANCE hInst,int cmdShow,
           LRESULT (WINAPI *pWndProc)(HWND,UINT,WPARAM,LPARAM),
           LPCTSTR menuName, int x, int y, int width, int height,
           UINT classStyle, DWORD windowStyle, HWND hParent)
    {
           
           char szClassName[] = "KWnd Class";
     




           wc.cbSize = sizeof(wc);
           wc.style  = CS_HREDRAW | CS_VREDRAW;
           wc.lpfnWndProc = pWndProc;
           wc.cbClsExtra = 0;
           wc.cbWndExtra = 0;
           wc.hInstance = hInst;
           wc.hIcon = LoadIcon(NULL, IDI_ERROR);
           wc.hCursor = LoadCursor(NULL, IDC_ARROW);
           wc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
           wc.lpszMenuName = NULL;
           wc.lpszClassName = szClassName;
           wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
           if (!RegisterClassEx(&wc))
              {
                                  char msg[100] = "Cannot Register Class: ";
                                  strcat(msg, szClassName);
                                  MessageBox(NULL, msg, "ErrOR",MB_OK);
                                  return;
              }
            hWnd = CreateWindow(szClassName, windowName, windowStyle, x, y, width, height, hParent, (HMENU)NULL, hInst, NULL);
           if (!hWnd)
              {
                           char msg[100] = "Cannot create window";
                           strcat(msg, windowName);
                           MessageBox(NULL, msg, "ErrOR",MB_OK);
                           return;
              }
           ShowWindow(hWnd, cmdShow);
           
    }

Последний раз редактировалось rUs_LAN; 11.04.2010 в 13:22. Причина: чучуть не то виклав ;)
rUs_LAN вне форума Ответить с цитированием
Старый 11.04.2010, 13:33   #4
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

rUs_LAN, если уж Вы (или автор книги по которой Вы учитесь) завернули часть ф-й в какие-то свои, доморощенные, ф-ии / классы, эти ф-ии / классы надо тоже выкладывать. Вы думаете, народу здесь делать нечего, кроме как ломать голову над тем, как выглядит файл KWnd.h и что делается внутри функции mainWnd()?!

Ещё до того, как Вы выложили ф-ю, я взял KWnd.h и KWnd.cpp вот отсюда, плюс Ваша программка. Visual Studio 6. Синтаксическая ошибка в
Код:
strcat( text, windowMenu );
(KWnd.cpp ) - не определено windowMenu. Закомментировал эту строчку, получил работающую программу. Окно с белым фоном, окружность по центру окна, кнопка <ололо Button>.
Vago вне форума Ответить с цитированием
Старый 11.04.2010, 13:35   #5
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

создайте проект Windows application в DevC++ и сравните со своим кодом
NiCola999 вне форума Ответить с цитированием
Старый 11.04.2010, 16:20   #6
rUs_LAN
Форумчанин
 
Регистрация: 15.11.2008
Сообщений: 577
По умолчанию

Цитата:
Сообщение от Vago Посмотреть сообщение
rUs_LAN, если уж Вы (или автор книги по которой Вы учитесь) завернули часть ф-й в какие-то свои, доморощенные, ф-ии / классы, эти ф-ии / классы надо тоже выкладывать. Вы думаете, народу здесь делать нечего, кроме как ломать голову над тем, как выглядит файл KWnd.h и что делается внутри функции mainWnd()?!

Ещё до того, как Вы выложили ф-ю, я взял KWnd.h и KWnd.cpp вот отсюда, плюс Ваша программка. Visual Studio 6. Синтаксическая ошибка в
Код:
strcat( text, windowMenu );
(KWnd.cpp ) - не определено windowMenu. Закомментировал эту строчку, получил работающую программу. Окно с белым фоном, окружность по центру окна, кнопка <ололо Button>.
Я не виклав ці класи тільки по 1 прицині бо я знав що вони 100% працюють, на наступний раз офк викладу, ті класи що ви знайшли дійсно з тої книжки що я вчуся,мене звісно приємно здивувало шо ви їх знайшли але вони чучуть відрізняються, в мене синтаксичний помилок не було просто програма не запускалась(скоріше всього запускалась і пропадала). Дивно але коли я видалив старий проект і створив новий з тим самим кодом (чучуть поудаляв правда) програма запустилась напевно начудив з настройками проекту.

Нехочу створювати нову тему тому запитаю тут. Чи можна скомпілювати код який написаний для visual studio в dev c++ якщо додавати всі необхідні бібліотеки (-lgdi32 наприклад) чи краше буде установити visual studio і писати в ньому ?
rUs_LAN вне форума Ответить с цитированием
Старый 11.04.2010, 16:29   #7
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

к сожалению я нихрена не понял
NiCola999 вне форума Ответить с цитированием
Старый 11.04.2010, 16:38   #8
rUs_LAN
Форумчанин
 
Регистрация: 15.11.2008
Сообщений: 577
По умолчанию

Цитата:
Сообщение от NiCola999 Посмотреть сообщение
к сожалению я нихрена не понял
жалко . Короче все ок тему можна закривати
rUs_LAN вне форума Ответить с цитированием
Старый 11.04.2010, 17:20   #9
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от rUs_LAN Посмотреть сообщение
Я не виклав ці класи тільки по 1 прицині бо я знав що вони 100% працюють
Дело не в том, работают они на 100% или на 98% Поймите... Вот, вы пишете, элементарное, стандартное однооконное виндузовое приложение... При этом нужно запрограммировать какие-то стандартные (уже двадцать лет как стандартные) действия. Теперь. Часть этих действий Вы (вслед за госп. Щупаком, так, кажется?) убираете в Kwnd. Но! Какую-то оставшуюся часть действий Вы-то всё-таки обязаны сделать сами, правильно? Но как можно определить, что Вы сделали правильно, а что - неправильно, а что - забыли сделать, ежели человек не знает, что упрятано в этот самопальный "стандартный" класс? Обратите внимание на самый первый Вам ответ от NiCola999 ! Вот он, как раз, не нашёл у Вас стандартного действия - вызова RegisterClass()! И для того, чтобы найти ошибку, как раз нужно было иметь перед глазами все исходные тексты.

По поводу смены компилятора / IDE, думаю, для того уровня задач, которые Вы сейчас решаете, чем компилировать - абсолютно без разницы. Хоть там, хоть там - сплошные обращения к ф-ям Win32 API Гораздо важнее - понимание того, что Вы делаете и внимательность. Удачи!
Vago вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вывод на екран misha25525 Помощь студентам 2 11.04.2010 13:08
Немогу вывести результат на екран dasha novikova Помощь студентам 0 09.03.2010 19:29
поскажите как печатать чтоб компилятор на екран виводил руский текст mato Общие вопросы C/C++ 12 23.12.2009 14:01
Как развернуть проигрываемый видео файл на весь екран SeRhy Мультимедиа в Delphi 2 26.01.2008 21:43