Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
| |
return 0; 23.10.06 00:19 Число просмотров: 3481
Автор: ben81 Статус: Незарегистрированный пользователь
|
Евгений, как я могу посмотреть результаты работы. Даже если я убираю строку "return 0;" окна всё равно не видно, конечно может быть я задаю глупые вопросы, но сам разобраться пока не могу. Спасибо за помощь !!!
|
<beginners>
|
Проверте код. 21.10.06 18:58
Автор: ben81 Статус: Незарегистрированный пользователь
|
Господа начал изучение С++ по книге, самый второй пример программы отказывается давать адекватные результаты. Приложение компилируется и компонуется без ошибок. Если кому не трудно посмотрите профессиональным глазом где здесь ошибка. Моё мнение - отсутствие "the App" .
#include "stdafx.h"
#include "Windows.h"
LRESULT CALLBACK
WindowFunc(HWND, UINT, WPARAM, LPARAM);
char *szWinName = "Простое окно";
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
HWND hWnd;
MSG msg;
WNDCLASS wc1;
wc1.hInstance = hInstance;
wc1.lpszClassName = szWinName;
wc1.lpfnWndProc = WindowFunc;
wc1.style = 0;
wc1.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc1.hCursor = LoadCursor(NULL, IDC_ARROW);
wc1.lpszMenuName = NULL;
wc1.cbClsExtra = 0;
wc1.cbClsExtra = 0;
wc1.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
if(!RegisterClass(&wc1))
hWnd = CreateWindow(szWinName, "Win32 API приложение", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
HWND_DESKTOP, NULL, hInstance, NULL);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return 0;
while(GetMessage(&msg, NULL, 0, 0));
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK
WindowFunc(HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
switch(iMsg)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, iMsg, wParam, lParam);
}
return 0;
}
|
|
выход из программы происходит до создания цикла-обработчика сообщений. Так и надо ? ;) return 0; 22.10.06 12:23
Автор: kstati <Евгений Борисов> Статус: Elderman
|
|
| |
return 0; 23.10.06 00:19
Автор: ben81 Статус: Незарегистрированный пользователь
|
Евгений, как я могу посмотреть результаты работы. Даже если я убираю строку "return 0;" окна всё равно не видно, конечно может быть я задаю глупые вопросы, но сам разобраться пока не могу. Спасибо за помощь !!!
|
| | |
Не реально ??? 23.10.06 22:57
Автор: ben81 Статус: Незарегистрированный пользователь
|
Джентльмены ! Я уверен что решение обязательно найдётся. Исправил две ошибки указанные в предыдущем сообщении - результата по прежнему нет. Спасибо за помощь.
|
| | | |
Еще дважды инициализируется поле cbClsExtra и ни разу cbWndExtra 24.10.06 01:30
Автор: amirul <Serge> Статус: The Elderman Отредактировано 24.10.06 01:32 Количество правок: 1
|
> Джентльмены ! Я уверен что решение обязательно найдётся. > Исправил две ошибки указанные в предыдущем сообщении - > результата по прежнему нет. Спасибо за помощь.
Во избежание таких ошибок частенько структуру перед инициализацией заполняют нулями (memset). Короче, вот рабочий вариант:
#include "Windows.h"
LRESULT CALLBACK
WindowFunc(HWND, UINT, WPARAM, LPARAM);
char *szWinName = "Простое окно";
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
HWND hWnd;
MSG msg;
WNDCLASS wc1;
wc1.hInstance = hInstance;
wc1.lpszClassName = szWinName;
wc1.lpfnWndProc = WindowFunc;
wc1.style = 0;
wc1.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc1.hCursor = LoadCursor(NULL, IDC_ARROW);
wc1.lpszMenuName = NULL;
wc1.cbClsExtra = 0;
wc1.cbWndExtra = 0;
wc1.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
if(!RegisterClass(&wc1))
return 0;
hWnd = CreateWindow(szWinName, "Win32 API приложение", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
HWND_DESKTOP, NULL, hInstance, NULL);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK
WindowFunc(HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
switch(iMsg)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, iMsg, wParam, lParam);
}
return 0;
}
---
--------------
Да, и theApp здесь ни при чем. Это не MFC приложение
|
| | | | |
Благодарю !!! 24.10.06 21:49
Автор: ben81 Статус: Незарегистрированный пользователь
|
Большое вам спасибо ! Вот что может произойти если не до конца разбираться в теме ... Ещё раз спасибо, досвидания.
|
| | |
Сдается мне, что еще в 2х строчках не совсем правильно 23.10.06 18:34
Автор: Neznaika <Alex> Статус: Member
|
1) if(!RegisterClass(&wc1))
Скорее всего, должно быть что-то вроде if(!RegisterClass(&wc1)) return ( -1 );
2) while(GetMessage(&msg, NULL, 0, 0));
Здесь точку с запятой - надо убрать
|
|
|