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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2012, 22:55   #1
Асурус
Пользователь
 
Регистрация: 17.03.2012
Сообщений: 15
По умолчанию Окно в visual c++ 2010

Здравствуйте, решил начать изучение создания окон в Windows. Нашёл код но в моей Visual C++ 2010 ничего не получилось. Так же у меня установлена SDK, как я понимаю для WinApi. Всё делаю только подключая заголовочный файл "windows.h". Возможно в этом есть ошибка, не знаю, но в текстах программ других подключаемых файлов не было. Вот текст прогораммы:

#include "windows.h"

LRESULT __stdcall WndProc(HWND hWnd, UINT massage,
WPARAM wParam,LPARAM lParam);

typedef struct {
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTACNE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName
} WNDCLASS, *PWNDCLASS;

int __stdcall WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
// if not work, needing copy from upstairs
WNDCLASS wc {
CS_OWNDC;
WndProc;
NULL;
NULL;
hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(6);
NULL;
wc.lpszClassName = L"wIndow";
} RegisterClass(&wc);

HWND hWnd = CreateWindow(L"wIndow", L"half-finished product",
WS_OVERLAPPEDWINDOW,
150,100,500,400,
NULL, NULL,hInstance,NULL);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);

MSG msg;

while(true)
{
if(PeekMassage(&msg,hWnd,0,0,PM_REM OVE))
{
if(msg.massage == WM_QUIT)
break;

TranslateMassage(&msg);
DispatchMassage(&msg);
}
}
return 0;
}

Знаю что здесь много ошибок, но это моя сборка с помощью руководства, которое я нашёл в интернете. Прошу указать на ошибки, за труды большое спасибо... Так же я нашёл готовый вариант, но среда выдаёт одинаковые ошибки... тут я совсем зашёл в тупик... Вот что пишет Visual C++:

1>LINK : error LNK2001: unresolved external symbol _WinMainCRTStartup
1>C:\Users\Aleksei\Documents\Visua l Studio 2010\Projects\window_first_step-001\Debug\window_first_step-001.exe : fatal error LNK1120: 1 unresolved externals

Ещё раз большое спасибо за обращённое внимание.
Асурус вне форума Ответить с цитированием
Старый 17.03.2012, 23:00   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

хм...вы точно создавали проект Win32?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 17.03.2012, 23:11   #3
Асурус
Пользователь
 
Регистрация: 17.03.2012
Сообщений: 15
По умолчанию

Я создал Win32 Project и поставил галачку пустой проэкт....
Асурус вне форума Ответить с цитированием
Старый 18.03.2012, 02:54   #4
StIX-S
Пользователь
 
Регистрация: 24.06.2011
Сообщений: 69
По умолчанию

в вашем коде куча ошибок, в том числе и синтаксических. лучше посмотрите то, что генерирует visual studio по умолчанию. для изучения GUI лучше воспользоваться программой VISG
StIX-S вне форума Ответить с цитированием
Старый 18.03.2012, 15:58   #5
*PB*
Форумчанин
 
Регистрация: 11.08.2009
Сообщений: 558
По умолчанию

ИМХО все можно сделать намного проще.
Код:
msg.MSG
InitCommonControls_()
hWnd = CreateWindowEx_(0, "#32770", "Прога", #WS_MINIMIZEBOX|#WS_SYSMENU|#WS_VISIBLE, #CW_USEDEFAULT, #CW_USEDEFAULT, 200,200, 0, 0, 0, 0)
While GetMessage_(msg, #Null, 0, 0 )
  TranslateMessage_(msg)  
  DispatchMessage_(msg)
  If msg\message = 273
    Break
  EndIf
Wend
Правда пример не на С++, но перевести на него будет не сложно.
Вложения
Тип файла: rar WinAPI.rar (764 байт, 11 просмотров)
*PB* вне форума Ответить с цитированием
Старый 18.03.2012, 16:38   #6
Асурус
Пользователь
 
Регистрация: 17.03.2012
Сообщений: 15
По умолчанию

Кто подскажет, что за язык используется выше? C#?
Асурус вне форума Ответить с цитированием
Старый 18.03.2012, 16:43   #7
*PB*
Форумчанин
 
Регистрация: 11.08.2009
Сообщений: 558
По умолчанию

Нет. Это PureBasic.
На C# нет смысла писать на WinAPI из-за .NET и того, что все API нужно будет самому декларировать.
Если уж что-то пишешь на WinAPI то, компилятор должен создавать нативный код, по возможности без рантайм библиотек, а иначе теряется смысл программирования на WinAPI.
К примеру, программа выше, будет работать даже на Windows 95 без установки дополнительных файлов, чего невозможно добиться используя C# (.NET не установится) или C++ из VS 2010.

А вообще, лучше использовать кроссплатформенные библиотеки и не привязываться к винде.

Последний раз редактировалось *PB*; 18.03.2012 в 16:48.
*PB* вне форума Ответить с цитированием
Старый 18.03.2012, 16:48   #8
microbit
Форумчанин
 
Аватар для microbit
 
Регистрация: 26.09.2011
Сообщений: 176
По умолчанию

Код:
#include <windows.h>

LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
	switch(msg)
	{
	case WM_DESTROY:
			PostQuitMessage(0);
			return 0;
	default: return(DefWindowProc(hwnd,msg,wParam,lParam));
	}
	
}
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE,LPSTR,int)
{
	MSG Msg;
	WNDCLASS wc=
	{
		CS_HREDRAW,WndProc,0L,0L,hInst,
		LoadIcon(NULL,IDI_APPLICATION),LoadCursor(NULL,IDC_ARROW),
		CreateSolidBrush(RGB(255,255,255)),NULL,"MainWindow"
	};
	RegisterClass(&wc);
	HWND hwnd=CreateWindow("MainWindow","Окно",WS_OVERLAPPEDWINDOW,10,10,600,400,HWND_DESKTOP,NULL,hInst,NULL);
	ShowWindow(hwnd,SW_SHOWNORMAL);
	while(GetMessage(&Msg,NULL,0,0))
	{
		DispatchMessage(&Msg);
	}
	return 0;
}
microbit вне форума Ответить с цитированием
Старый 18.03.2012, 17:39   #9
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Асурус

Подход неправильный. Изучать WinAPI (и вообще, что-либо) нужно по книжкам, а не фтыкая в найденный на помойке говно-код.
Rififi вне форума Ответить с цитированием
Старый 18.03.2012, 20:26   #10
Асурус
Пользователь
 
Регистрация: 17.03.2012
Сообщений: 15
По умолчанию

microbit
Спасибо за старания. Только моя среда выдаёт это:

1>------ Build started: Project: Window, Configuration: Debug Win32 ------
1>LINK : error LNK2001: unresolved external symbol _WinMainCRTStartup
1>C:\Users\Aleksei\Documents\Visua l Studio 2010\Projects\Window\Debug\Window.e xe : fatal error LNK1120: 1 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Думаю проблема в настройках... Какая, не знаю...
Асурус вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ на Visual studio 2010 Kasperiks Visual C++ 3 07.01.2012 19:19
При каждом запуске Word 2010 вылезает окно настройки iukash Microsoft Office Word 0 23.11.2011 23:05
visual studio 2010>>>Cи? abzas Общие вопросы C/C++ 13 22.09.2011 20:58
Проблема с microsoft visual c++ 2010, нет окно решение XxXGhosTXxX Софт 3 04.04.2011 18:22
Visual studion 2010 Dimarik Общие вопросы .NET 6 23.05.2010 22:02