nie moge znalezc buga

0

nie moge znalezc bledu w tym kodzie, a natrafiam na 2 problemy:

program ma za zadanie wyswietlic okno

  1. nie moge wpisac WindowProc w okno.lpfnWndProc. kiedy to robie, kompilator pokazuje blad o nieznanym obiekcie

  2. kiedy wywale linie z bladem 1 (nie wiem, czy to jest przyczyna problemu) i skompiluje program i tak nie wyswietla sie okno...

CO ROBIC??? [???]

//---------------------------------------------------------------------------
#define WIN32_LEAN_AND_MEAN

#include <windowsx.h>
#include <windows.h>
#include <stdio.h>
#pragma hdrstop

//---------------------------------------------------------------------------
// MOJE MIEJSCE NA DEKLARACJE ZMIENNYCH I STRUKTUR
//------------------------------------------------

//deklaracja okna programu
WNDCLASSEX okno;
HWND hwnd;
//!-----------------------------------------------

#pragma argsused
WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
  //ustalam wlasciwosci mojego okna
  okno.cbSize = sizeof(WNDCLASSEX);
  okno.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
  okno.lpfnWndProc = WindowProc; <b>!!!PROBLEM NR. 1!!!</b>
  okno.cbClsExtra = 0;
  okno.cbWndExtra = 0;
  okno.hInstance = hInstance;
  okno.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  okno.hCursor = LoadCursor(NULL, IDC_ARROW);
  okno.hbrBackground = GetStockObject(BLACK_BRUSH);
  okno.lpszMenuName = NULL;
  okno.lpszClassName = "okno1";
  okno.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

  //rejestruje klase
  if (!RegisterClassEx(&okno))
    MessageBox(NULL, "Error", "Couldn't register class.", MB_OKCANCEL);

  //tworze okno
  hwnd = CreateWindowEx(NULL,
                    "okno",
                    "tekst",
                    WS_OVERLAPPEDWINDOW | WS_VISIBLE,
                    10, 10,
                    300, 400,
                    NULL,
                    NULL,
                    hInstance,
                    NULL);



  ShowWindow(hwnd, nCmdShow);
  if (hwnd == NULL)
    MessageBox(NULL, "Error", "Couldn't create window.", MB_OKCANCEL);

  return 0;
}
//---------------------------------------------------------------------------
0

Bledem jest wlasnie brak WindowProc !!!!!!!!!!! Musi byc zeby poprawnie zarejestrowac klase okna .
A do tego musi miec odpowiednia zawartosc by okno sie pojawilo. O windowProc poczytaj np w MSDN-ie musi byc CALLBACK itp itd . Jej brak powoduje te bledy !!

0

no dobra, to czemu jak wpisze:

okno.lpfnWndProc = WindowProc;

to wyskakuje mi blad:

undefined symbol 'WindowProc'???

0

Dobra a moze teraz przeczytasz jeszcze raz moj post powyzej ??!! :-[ Tam jest napisane odpowiednio wypelniona funkcja. Wiec niby jak chcesz wpisac WindowProc skoro nigdzie jej nie zadeklarowales i co najwazniejsze nie zaimplementowales !! Wpiszw MSDN-ie czy Platform SDK CreateWindow i tam bedzie napisane jakiego typu ma byc WindowProc i co ma zawierac !!

0

Przed funkcją WinMain wpisz deklarację WindowProc w ten oto sposób :

LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM);

a gdzieś za WinMain umieść treść zaderklarowanej funkcji :

LRESULT CALLBACK
WindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)                  
    {
        case WM_DESTROY:
            PostQuitMessage (0);            
        break;
        default:
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}

Teraz powinno działać...

1 użytkowników online, w tym zalogowanych: 0, gości: 1