PDA

Просмотр полной версии : не создается окно


fire64
30.11.2008, 00:01
подскажите что не так в этом коде

дело в том что выполняется условие

if (!hWnd)
{
return false;
}

и окно не создается




#include <windows.h>

#include "stdafx.h"

extern HMODULE hClientApp;

LPCTSTR lpszAppName = "MyApp";
LPCTSTR lpszTitle = "My Application";



bool Wind_Init()
{


MSG msg;
HWND hWnd;
WNDCLASSEX wc;

// Register the application window class.
//............................................
wc.style = CS_HREDRAW | CS_VREDRAW;
// wc.lpfnWndProc = (WNDPROC)WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = (HINSTANCE)hClientApp;
wc.hIcon = LoadIcon( (HINSTANCE)hClientApp, lpszAppName );
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = lpszAppName;
wc.lpszClassName = lpszAppName;
wc.cbSize = sizeof(WNDCLASSEX);
// wc.hIconSm = LoadImage( (HINSTANCE)hClientApp, lpszAppName,
// IMAGE_ICON, 16, 16,
// LR_DEFAULTCOLOR );
if (!RegisterClassEx( &wc ))
{
return false;
}

hWnd = CreateWindow( lpszAppName,
lpszTitle,
WS_OVERLAPPEDWINDOW,

//size windows

400, // координаты окна по ширине
300, // координаты окна по высоте
170, // ширина окна
350, // высота окна


NULL,
NULL,
(HINSTANCE)hClientApp,
NULL
);

if (!hWnd)
{
return false;
}

ShowWindow( hWnd, 0 );
UpdateWindow( hWnd );

while( GetMessage( &msg, NULL, 0, 0) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}

return true;
}

0verbreaK
30.11.2008, 00:04
GetLastError что говорит?

bons
30.11.2008, 14:29
вот работающий код минимального окна

#include <windows.h>

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

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static char szAppName[] = "HelloWin" ;
HWND hwnd ;
MSG msg ;
WNDCLASSEX wndclass ;

wndclass.cbSize = sizeof (wndclass) ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;
wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION) ;

RegisterClassEx (&wndclass) ;

hwnd = CreateWindow (szAppName, // window class name
"The Hello Program", // window caption
WS_OVERLAPPEDWINDOW, // window style
CW_USEDEFAULT, // initial x position
CW_USEDEFAULT, // initial y position
CW_USEDEFAULT, // initial x size
CW_USEDEFAULT, // initial y size
NULL, // parent window handle
NULL, // window menu handle
hInstance, // program instance handle
NULL) ; // creation parameters

ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;

while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
HDC hdc ;
PAINTSTRUCT ps ;
RECT rect ;

switch (iMsg)
{

case WM_PAINT :
hdc = BeginPaint (hwnd, &ps) ;

GetClientRect (hwnd, &rect) ;

DrawText (hdc, "Hello, world", -1, &rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;

EndPaint (hwnd, &ps) ;
return 0 ;

case WM_DESTROY :
PostQuitMessage (0) ;
return 0 ;
}

return DefWindowProc (hwnd, iMsg, wParam, lParam) ;
}

t04
30.11.2008, 14:48
procedure WndProc(hWnd,uMsg:LongWord;wParam,lParam:Longint) stdcall;
begin
case uMsg of
WM_DESTROY: PostQuitMessage(0);
DefWindowProc(hWnd,uMsg,wParam,lParam);
end;

...
в заполнении WNDCLASSEX
wc.lpfnWndProc:=@WndProc;

ShowWindow( hWnd, 0 );

const
SW_HIDE = 0;
SW_NORMAL = 1;

сделай
ShowWindow( hWnd, SW_NORMAL );
или
ShowWindow( hWnd, 1 );

убери

if (!hWnd)
{
return false;
}


так никто не делает
сделай так

if (hWnd=INVALID_HANDLE_VALUE)or(hWnd<1) then
exit;

Dian
30.11.2008, 16:43
подскажите что не так в этом коде
Закомменчено присвайвание указателя на оконную процедуру. Без нее работать не может.
А вообще обычно лучше смотреть код ошибки

0verbreaK
30.11.2008, 20:53
Dian без обработчика тоже должно работать, для окна не совсем нужен он.

t04
01.12.2008, 00:24
думаю что ошибка в каком то ненормальном if операторе

никогда не видел чтобы писали такое

делфи даже не скомпилирует такое "чудо"

bons
01.12.2008, 01:15
:))
потому что это не делфи;)

De-visible
01.12.2008, 02:42
t04, ты помоему темой ошибся.

sn0w
01.12.2008, 11:59
топикстартер, а как ты предлагаешь окну работать если в твоем коде:

// wc.lpfnWndProc = (WNDPROC)WndProc;

?!?!?