#include <windows.h>
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hDC;
PAINTSTRUCT PaintSt;
RECT aRect;
switch(message)
{
case(WM_PAINT):
hDC = BeginPaint(hWnd,&PaintSt);
GetClientRect(hWnd,&aRect);
SetBkMode(hDC, TRANSPARENT);
DrawText(hDC,L"Это ТеХт, денег не дам!",-1,&aRect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
EndPaint(hWnd,&PaintSt);
return 0;
case(WM_DESTROY):
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hWnd,message,wParam,lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
WNDCLASSEX wcex;
HWND hWnd;
MSG msg;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = WindowProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = L"WIndowClass";
wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
if (!RegisterClassEx(&wcex))
{
MessageBox(NULL,
L"Call to RegisterClassEx failed!",
L"Win32 Guided Tour",
NULL);
return 1;
}
hWnd = CreateWindow(L"OFWin",L"My First Window",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
0,0,hInstance,0);
hWnd = CreateWindow(L"xXx",L"wWw",WS_VISIBLE,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,0,0,hInstance,0);
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
while(GetMessage(&msg,0,0,0)== TRUE)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return static_cast<int>(msg.wParam);
}
проблема с Win API, не отображается окно
проблема следующая, код компилируется, запускается и ничего...
висит в процессах, дебаг показал что прога ждёт отклика от GetMessage(&msg,0,0,0), как и должно быть.
вопрос, почему не отображается окошко на экране?
и в каких случаях регистрация окна (т.е. RegisterClassEx()) не происходит?(был трабл с регистрацией, но я что то поменял и он пропал, но что забыл:confused:)
п.с. среда VS2005 Professional
Код:
Код:
wcex.lpszClassName = L"WIndowClass";
А создаешь окна с несуществующими классами "xxx" и "OFWin"
Код:
hWnd = CreateWindow(L"OFWin"...
hWnd = CreateWindow(L"xXx", ...
hWnd = CreateWindow(L"xXx", ...
Можешь сделать проветку, hWnd будет равен нулю.
Кстати, ты создаешь два окна, заведи для каждого свою hWnd, а то первое окно ты "теряешь"
хотелось бы узнать по поводу регистрации...
из-за чего мне могло такого рода ошибку выдавать?(вот исправил её как-то, но как - уже умудрился забыть, а надо же знать из-за чего она у меня могла быть)
Цитата:
first-chance exception at 0x7c910370 in win 001.exe: 0xC0000005: Access violation reading location 0xcccccccc.
выдавало её на RegisterClassEx(&wcex)
wcex у тебя локальная, значит при инициализации у нее все поля забиы случайными данными. Скорее всего ты не обнулил lpszMenuName и он указывал на неверный участок памяти. Перед заполнением структуры вызови ZeroMemory() что бы забить все нулями, и ошибок быть не должно.
Цитата: 0nni
wcex у тебя локальная, значит при инициализации у нее все поля забиы случайными данными
... а в Debug-версии проекта байтами 0xCC что и видно по тексту ошибки
Цитата: 0nni
wcex у тебя локальная, значит при инициализации у нее все поля забиы случайными данными. Скорее всего ты не обнулил lpszMenuName и он указывал на неверный участок памяти. Перед заполнением структуры вызови ZeroMemory() что бы забить все нулями, и ошибок быть не должно.
Или, чтобы не засорять код написать
Код:
WNDCLASSEX wcex = { 0 };