Windows API - помощь начинающим - PullRequest
2 голосов
/ 13 марта 2010

Я пытаюсь создать очень простое приложение, используя 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 и записывающего эти строки).

Ответы [ 3 ]

1 голос
/ 13 марта 2010

Существует две версии большинства вызовов Windows API, одна из которых принимает однобайтовую строку, а другая - 2-байтовые строки Юникода. Один байт имеет 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 голосов
/ 13 марта 2010

Чтобы приложение обрабатывало сообщения, вам нужно хотя бы цикл обработки сообщений:

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

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

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

0 голосов
/ 13 марта 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...