Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.09.2010, 00:51   #1
Progsenya
Пользователь
 
Регистрация: 30.05.2010
Сообщений: 80
По умолчанию Стандартное окно

Код:
#include <windows.h>
LRESULT CALLBACK WindProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
    LPSTR lpCmdLine, int nCmdShow)
{
	HWND hMainWnd;
	char szClassName[]="My Class";
	MSG msg;
	WNDCLASSEX wc;
	//заполняем структуру класса окна
	wc.cbSize	    =sizeof(wc);
	wc.style        =CS_HREDRAW | CS_VREDRAW;
	wc.lpfnWndProc	=WndProc;
	wc.cbClsExtra	=0;
	wc.cbWndExtra	=0;
	wc.hInstance	=hInstance;
	wc.hIcon		=LoadIcon(NULL,IDI_APPLICATION);
	wc.hCursor		=LoadCursor(NULL,IDC_ARROW);
	wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
	wc.lpszMenuName	=NULL;
	wc.lpszClassName= szClassName;
	wc.hIcon		=LoadIcon(NULL,IDI_APPLICATION);

	//регистрируем класс окна
	if(!RegisterClassEx(&wc))
	{
		MessageBox(NULL,"Cannot register class","Error",MB_OK);
		return 0;
	}
	//создаем основное окно приложения
	hMainWnd=CreateWindow(
	szClassName,"A Hello Application",WS_OVERLAPPEDWINDOW,
	CW_USEDEFAULT,0,CW_USEDEFAULT,0,(HWND)NULL,(HMENU)NULL,
	(HINSTANCE) hInstance, NULL);
	
	if(!hMainWnd)
	{
		MessageBox(NULL,"Cannot create main window","Error",MB_OK);
		return 0;
	}
	//показываем наше окно
	ShowWindow(hMainWnd,nCmdShow);
	while(GetMessage(&msg,NULL,0,0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
	HDC hDC;
	PAINTSTRUCT ps;
	RECT rect;
	switch(uMsg)
	{
	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);
		break;
	case WM_CLOSE:
		DestroyWindow(hWnd);
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	default:
		DefWindowProc(hWnd,uMsg,wParam,lParam);
	}
	return 0;



}
проблема вот в чем выдает ошибку на
wc.lpfnWndProc =WndProc;
Progsenya вне форума Ответить с цитированием
Старый 20.09.2010, 00:55   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

у в начале не WndProc а WindProc
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.09.2010, 00:56   #3
Progsenya
Пользователь
 
Регистрация: 30.05.2010
Сообщений: 80
По умолчанию

большое спасибо

все равно пишет сообщение Cannot rigister class

Последний раз редактировалось Stilet; 20.09.2010 в 08:05.
Progsenya вне форума Ответить с цитированием
Старый 20.09.2010, 07:29   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
	//заполняем структуру класса окна
	wc.cbSize	    =sizeof(wc);
	wc.style        =CS_HREDRAW | CS_VREDRAW;
	wc.lpfnWndProc	=WndProc;
	wc.cbClsExtra	=0;
	wc.cbWndExtra	=0;
	wc.hInstance	=hInstance;
	wc.hIcon		=LoadIcon(NULL,IDI_APPLICATION);
	wc.hCursor		=LoadCursor(NULL,IDC_ARROW);
	wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
	wc.lpszMenuName	=NULL;
	wc.lpszClassName= szClassName;
	wc.hIcon		=LoadIcon(NULL,IDI_APPLICATION);
           wc.hIconSm=NULL;//скорее всего в этом дело, ибо иных ошибок не замечаю(может еще конечно плохо проснулся)

	//регистрируем класс окна
	if(!RegisterClassEx(&wc))
	{
		MessageBox(NULL,"Cannot register class","Error",MB_OK);
		return 0;
	}
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.09.2010, 07:56   #5
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Откройте для себя GetLastError.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[?] Послать клавишу в чужое окно, не выводя окно на передний план. Moriarty Win Api 4 21.02.2011 05:11
Заменить стандартное событие компонента при создании своего. postal2 Компоненты Delphi 6 28.08.2009 11:01
Как добавить свой раздел в стандартное контекстное меню yaver Общие вопросы Delphi 2 26.11.2008 19:44
Стандартное окно подключения удалённого доступа? AlexRastr Общие вопросы Delphi 4 16.10.2008 18:49
Как зная путь к файлу показать стандартное конт. меню hoza_syl Общие вопросы Delphi 6 11.07.2008 14:54