2010-03-13 2 views
2

Я пытаюсь создать очень простое приложение с использованием API окон.Windows API - помощь для начинающих

Я сделал несколько небольших приложений в консоли. Это первый раз, когда я использую приложения Win32. Я искал и нашел документ от фальсификаторов, который рекомендуется на этом сайте. Но я стараюсь, чтобы написать самую первую строку:

#include <stdafx.h> 
#include <windows.h> 

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
    LPSTR lpCmdLine, int nCmdShow) 
{ 
    MessageBoxW(NULL, "Good bye Cruel World", "Note", MB_OK); 
    return 0; 
} 

Но он не работает (стертые линий от проекта по умолчанию, созданный VS 2008 и пишет эти строки).

ответ

1

Существует две версии большинства вызовов API окон, одна из которых принимает одну байтовую строку и одну, которая принимает 2 байтовые строки Unicode. В одном байтовом объявлении есть A в конце имени, а 2 байта - W. Существуют макросы, определенные в windows.h, так что, если вы оставите букву, она выбирает одну или другую в зависимости от макросов компилятора.

В своем коде вы пишете -

MessageBoxW (NULL, "Good bye Cruel World", "Note", MB_OK); 

Вы вызываете широкий вариант символов в API с отдельными строками байт, которые не будут работать. Либо измените на MessageBoxA, либо измените свои строки на широкие строки -

MessageBoxW (NULL, L"Good bye Cruel World", L"Note", MB_OK); 
0

Удалить первую строку. Остается действительная программа Windows, которая должна компилироваться в любой среде IDE. Ваша проблема - заголовок stdafx.h, который является артефактом VS, и у вас могут возникнуть другие проблемы, если вы попытаетесь «повторно использовать» существующий проект VS. Если вы хотите, чтобы компиляция действительно работала, неплохо создать некоторые простые приложения, не использующие IDE, но компилятор командной строки, такой как MinGW.

И в дальнейшем опубликуйте, какие сообщения об ошибках вы получаете с помощью копирования и вставки.

+0

Это не работает, если я не включаю 1-ю строку. Моя школа использует VS, поэтому я должен следовать им :) – nXqd

+0

@nXqd «Это не работает» для нас бесполезно - вы должны точно сказать, какие сообщения об ошибках вы получаете. – 2010-03-13 11:14:13

0

Вы должны по крайней мере, цикл обработки сообщений для запуска, для того, чтобы приложения для обработки сообщений:

while(GetMessage(&msg, NULL, 0, 0)) 
{ 
    TranslateMessage(&msg); 
    DispatchMessage(&msg); 
} 

Есть много учебников на цикл обработки сообщений в сети, например, здесь:

Если вы только начинаете программирование GUI, вы лучше от чтения книги, и работа с примерами. Петцольд - классик. Обучение программированию путем сбора фрагментов частично рабочего кода, вырезанного из случайных веб-страниц, будет трудоемким, сложным и неоднородным. Хорошо написанная книга проведет вас через основы и объяснит вещи поэтапно. Повеселись!

+1

Нет, нет. Вполне возможно писать приложения Windows без цикла сообщений - код опроса является одним из примеров. – 2010-03-13 10:21:35

+0

Хорошо, хороший момент - поэтому 'MessageBox' имеет свой собственный насос сообщений. Совет по чтению хорошей книги все еще стоит. :) – gavinb

Смежные вопросы