информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Все любят медГде водятся OGRыПортрет посетителя
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Microsoft обещает радикально усилить... 
 Ядро Linux избавляется от российских... 
 20 лет Ubuntu 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / beginners
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
Еще дважды инициализируется поле cbClsExtra и ни разу cbWndExtra 24.10.06 01:30  Число просмотров: 3364
Автор: 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 приложение
<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-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach