информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Портрет посетителяСетевые кракеры и правда о деле ЛевинаАтака на Internet
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / beginners
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
выход из программы происходит до создания цикла-обработчика сообщений. Так и надо ? ;) return 0; 22.10.06 12:23  Число просмотров: 3014
Автор: kstati <Евгений Борисов> Статус: Elderman
<"чистая" ссылка>
<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));
Здесь точку с запятой - надо убрать
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach