Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |

30.11.2008, 00:01
|
|
Участник форума
Регистрация: 01.04.2008
Сообщений: 200
Провел на форуме: 1059196
Репутация:
39
|
|
не создается окно
подскажите что не так в этом коде
дело в том что выполняется условие
if (!hWnd)
{
return false;
}
и окно не создается
PHP код:
#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;
}
|
|
|

30.11.2008, 00:04
|
|
Постоянный
Регистрация: 30.04.2008
Сообщений: 323
Провел на форуме: 379101
Репутация:
136
|
|
GetLastError что говорит?
|
|
|

30.11.2008, 14:29
|
|
Участник форума
Регистрация: 20.12.2007
Сообщений: 295
Провел на форуме: 1777055
Репутация:
347
|
|
вот работающий код минимального окна
Код:
#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) ;
}
|
|
|

30.11.2008, 14:48
|
|
Участник форума
Регистрация: 10.01.2007
Сообщений: 140
Провел на форуме: 246020
Репутация:
105
|
|
Код:
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;
Последний раз редактировалось t04; 30.11.2008 в 15:03..
|
|
|

30.11.2008, 16:43
|
|
Участник форума
Регистрация: 02.09.2008
Сообщений: 101
Провел на форуме: 196792
Репутация:
37
|
|
подскажите что не так в этом коде
Закомменчено присвайвание указателя на оконную процедуру. Без нее работать не может.
А вообще обычно лучше смотреть код ошибки
|
|
|

30.11.2008, 20:53
|
|
Постоянный
Регистрация: 30.04.2008
Сообщений: 323
Провел на форуме: 379101
Репутация:
136
|
|
Dian без обработчика тоже должно работать, для окна не совсем нужен он.
|
|
|

01.12.2008, 00:24
|
|
Участник форума
Регистрация: 10.01.2007
Сообщений: 140
Провел на форуме: 246020
Репутация:
105
|
|
думаю что ошибка в каком то ненормальном if операторе
никогда не видел чтобы писали такое
делфи даже не скомпилирует такое "чудо"
|
|
|

01.12.2008, 01:15
|
|
Участник форума
Регистрация: 20.12.2007
Сообщений: 295
Провел на форуме: 1777055
Репутация:
347
|
|
 )
потому что это не делфи 
|
|
|

01.12.2008, 02:42
|
|
Banned
Регистрация: 06.01.2008
Сообщений: 904
Провел на форуме: 4037638
Репутация:
1821
|
|
t04, ты помоему темой ошибся.
|
|
|

01.12.2008, 11:59
|
|
Статус пользователя:
Регистрация: 26.07.2005
Сообщений: 568
Провел на форуме: 1290766
Репутация:
1236
|
|
топикстартер, а как ты предлагаешь окну работать если в твоем коде:
// wc.lpfnWndProc = (WNDPROC)WndProc;
?!?!?
__________________
 
snow white world wide
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|