Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Богдан всепытный
7 / 15 / 3
Регистрация: 10.11.2017
Сообщений: 225
#1

Не создаётся окно!

12.01.2018, 22:30. Просмотров 876. Ответов 7
Метки нет (Все метки)

В visual studio лезут ошибки
вот как проходила сборка:

1>------ Сборка начата: проект: Проект1, Конфигурация: Debug Win32 ------
1> Source.cpp
1>v:\visual studio\проекты\проект1\проект1\source.cpp(23): error C2440: =: невозможно преобразовать "char [9]" в "LPCWSTR"
1> v:\visual studio\проекты\проект1\проект1\source.cpp(23): note: Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>v:\visual studio\проекты\проект1\проект1\source.cpp(38): error C2664: "HWND CreateWindowExW(DWORD,LPCWSTR,LPCWSTR,DWORD,int,int,int,int,HWND,HMENU,HINSTANCE,LPVOID)": невозможно преобразовать аргумент 2 из "char [9]" в "LPCWSTR"
1> v:\visual studio\проекты\проект1\проект1\source.cpp(38): note: Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>v:\visual studio\проекты\проект1\проект1\source.cpp(60): error C2664: "BOOL PlaySoundW(LPCWSTR,HMODULE,DWORD)": невозможно преобразовать аргумент 1 из "const char [13]" в "LPCWSTR"
1> v:\visual studio\проекты\проект1\проект1\source.cpp(60): note: Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>v:\visual studio\проекты\проект1\проект1\source.cpp(69): error C2664: "int DrawTextW(HDC,LPCWSTR,int,LPRECT,UINT)": невозможно преобразовать аргумент 2 из "const char [19]" в "LPCWSTR"
1> v:\visual studio\проекты\проект1\проект1\source.cpp(69): note: Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

Вот код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <windows.h>
 
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
 
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
     {
     static char szAppName[] = "HelloWin" ;
     HWND        hwnd ;
     MSG         msg ;
     WNDCLASSEX  wndclass ;
 
     wndclass.cbSize        = sizeof (wndclass) ;
     wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
     wndclass.lpfnWndProc   = WndProc ;
     wndclass.cbClsExtra    = 0 ;
     wndclass.cbWndExtra    = 0 ;
     wndclass.hInstance     = hInstance ;
     wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
     wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
     wndclass.lpszMenuName  = NULL ;
     wndclass.lpszClassName = szAppName ;
     wndclass.hIconSm       = LoadIcon (NULL, IDI_APPLICATION) ;
 
     RegisterClassEx (&wndclass) ;
 
     hwnd = CreateWindow (szAppName,         // window class name
                    "The Hello Program",     // window caption
                    WS_OVERLAPPEDWINDOW,     // window style
                    CW_USEDEFAULT,           // initial x position
                    CW_USEDEFAULT,           // initial y position
                    CW_USEDEFAULT,           // initial x size
                    CW_USEDEFAULT,           // initial y size
                    NULL,                    // parent window handle
                    NULL,                    // window menu handle
                    hInstance,               // program instance handle
                    NULL) ;                  // creation parameters
 
     ShowWindow (hwnd, iCmdShow) ;
     UpdateWindow (hwnd) ;
 
     while (GetMessage (&msg, NULL, 0, 0))
          {
          TranslateMessage (&msg) ;
          DispatchMessage (&msg) ;
          }
     return msg.wParam ;
     }
 
LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
     {
     HDC         hdc ;
     PAINTSTRUCT ps ;
     RECT        rect ;
 
     switch (iMsg)
          {
          case WM_CREATE :
               PlaySound ("hellowin.wav", NULL, SND_FILENAME | SND_ASYNC) ;
               return 0 ;
 
          case WM_PAINT :
               hdc = BeginPaint (hwnd, &ps) ;
 
               GetClientRect (hwnd, &rect) ;
 
               DrawText (hdc, "Hello, Windows 95!", -1, &rect,
                         DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;
 
               EndPaint (hwnd, &ps) ;
               return 0 ;
 
          case WM_DESTROY :
               PostQuitMessage (0) ;
               return 0 ;
          }
 
     return DefWindowProc (hwnd, iMsg, wParam, lParam) ;
     }
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2018, 22:30
Ответы с готовыми решениями:

Не создаётся окно
Добрый день, подскажите пожалуйста, почему не создаётся окно: hwndChildForm =...

Не создаётся окно
Я пытаюсь сделать создания окна с контекстом OpenGL, сделал класс с функциями...

Создаётся скрин с неправильными координатами
скрин создаётся справа и ниже чем надо, помогите, я уже не знаю что делать....

Не создаётся фаил при использовании CreateFile
#include &lt;Windows.h&gt; #include &lt;iostream&gt; using namespace std; int main()...

Не создаётся файл после работы с диалогом сохранения файла
Уважаемые форумчане! Я учусь работать c WinApi создаю простой текстовый...

7
Fulcrum_013
Заблокирован
12.01.2018, 22:39 #2
Оно строки wchar_t просит а не char
0
Богдан всепытный
7 / 15 / 3
Регистрация: 10.11.2017
Сообщений: 225
12.01.2018, 22:48  [ТС] #3
а wchar_t это что???

Добавлено через 6 минут
Исправил вот так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <windows.h>
 
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    PSTR szCmdLine, int iCmdShow)
{
    static wchar_t szAppName[] = L"HelloWin";
    HWND        hwnd;
    MSG         msg;
    WNDCLASSEX  wndclass;
 
    wndclass.cbSize = sizeof(wndclass);
    wndclass.style = CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc = WndProc;
    wndclass.cbClsExtra = 0;
    wndclass.cbWndExtra = 0;
    wndclass.hInstance = hInstance;
    wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
    wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wndclass.lpszMenuName = NULL;
    wndclass.lpszClassName = szAppName;
    wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
 
    RegisterClassEx(&wndclass);
 
    hwnd = CreateWindow(szAppName,         // window class name
        "The Hello Program",     // window caption
        WS_OVERLAPPEDWINDOW,     // window style
        CW_USEDEFAULT,           // initial x position
        CW_USEDEFAULT,           // initial y position
        CW_USEDEFAULT,           // initial x size
        CW_USEDEFAULT,           // initial y size
        NULL,                    // parent window handle
        NULL,                    // window menu handle
        hInstance,               // program instance handle
        NULL);                   // creation parameters
 
    ShowWindow(hwnd, iCmdShow);
    UpdateWindow(hwnd);
 
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
    HDC         hdc;
    PAINTSTRUCT ps;
    RECT        rect;
 
    switch (iMsg)
    {
    case WM_CREATE:
        PlaySound(L"hellowin.wav", NULL, SND_FILENAME | SND_ASYNC);
        return 0;
 
    case WM_PAINT:
        hdc = BeginPaint(hwnd, &ps);
 
        GetClientRect(hwnd, &rect);
 
        DrawText(hdc, L"Hello, Windows 95!", -1, &rect,
            DT_SINGLELINE | DT_CENTER | DT_VCENTER);
 
        EndPaint(hwnd, &ps);
        return 0;
 
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }
 
    return DefWindowProc(hwnd, iMsg, wParam, lParam);
}
Вот сборка:

1>------ Сборка начата: проект: Проект1, Конфигурация: Debug Win32 ------
1> Source.cpp
1>v:\visual studio\проекты\проект1\проект1\source.cpp(38): error C2664: "HWND CreateWindowExW(DWORD,LPCWSTR,LPCWSTR,DWORD,int,int,int,int,HWND,HMENU,HINSTANCE,LPVOID)": невозможно преобразовать аргумент 3 из "const char [18]" в "LPCWSTR"
1> v:\visual studio\проекты\проект1\проект1\source.cpp(38): note: Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
0
Fulcrum_013
Заблокирован
12.01.2018, 22:51 #4
Цитата Сообщение от Богдан Хакер Посмотреть сообщение
а wchar_t это что???
это как char только wchar_t. 2-байтовые символы для уникода. т.е. все сhar замени на wchar_t перед всеми строками поставь L, т.е. к примеру L"HelloWin"

Добавлено через 2 минуты
"The Hello Program", тоже L поставь
1
Богдан всепытный
7 / 15 / 3
Регистрация: 10.11.2017
Сообщений: 225
12.01.2018, 23:10  [ТС] #5
Если поставить L то лезет следующее:

1>------ Сборка начата: проект: Проект1, Конфигурация: Debug Win32 ------
1> Source.cpp
1>Source.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__PlaySoundW@12 в функции "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z)
1>V:\Visual Studio\проекты\Проект1\Debug\Проект1.exe : fatal error LNK1120: неразрешенных внешних элементов: 1
========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
0
Fulcrum_013
Заблокирован
12.01.2018, 23:16 #6
Лучший ответ Сообщение было отмечено Богдан всепытный как решение

Решение

Добавь в проект (в дерево проекта в SolutionExplore не в код) Winmm.lib

Добавлено через 3 минуты
или после инклюдов добавь строчку
C++
1
#pragma comment(lib,"Winmm.lib")
но такой код поймет только студия другие компиляторы нет
2
Богдан всепытный
7 / 15 / 3
Регистрация: 10.11.2017
Сообщений: 225
12.01.2018, 23:16  [ТС] #7
работает!!! А что за winmm??? Спасибо!!!!!!!!!!
0
8Observer8
2234 / 1419 / 226
Регистрация: 05.10.2013
Сообщений: 4,386
Записей в блоге: 56
18.01.2018, 23:23 #8
Цитата Сообщение от Богдан Хакер Посмотреть сообщение
А что за winmm?
Это библиотека, в которой находится реализация метода PlaySound

В документации на MSDN на PlaySound написано в самом низу страницы, что требуется Winmm.lib

Цитата Сообщение от Богдан Хакер Посмотреть сообщение
L"Hello, Windows 95!"
Можно ещё так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <windows.h>
#include <tchar.h>
 
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    PSTR szCmdLine, int iCmdShow)
{
    LPCTSTR szAppName = _T("HelloWin");
    HWND        hwnd;
    MSG         msg;
    WNDCLASSEX  wndclass;
 
    wndclass.cbSize = sizeof(wndclass);
    wndclass.style = CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc = WndProc;
    wndclass.cbClsExtra = 0;
    wndclass.cbWndExtra = 0;
    wndclass.hInstance = hInstance;
    wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
    wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wndclass.lpszMenuName = NULL;
    wndclass.lpszClassName = szAppName;
    wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
 
    RegisterClassEx(&wndclass);
 
    hwnd = CreateWindow(szAppName,  // window class name
        _T("The Hello Program"),    // window caption
        WS_OVERLAPPEDWINDOW,        // window style
        CW_USEDEFAULT,              // initial x position
        CW_USEDEFAULT,              // initial y position
        CW_USEDEFAULT,              // initial x size
        CW_USEDEFAULT,              // initial y size
        NULL,                       // parent window handle
        NULL,                       // window menu handle
        hInstance,                  // program instance handle
        NULL);                      // creation parameters
 
    ShowWindow(hwnd, iCmdShow);
    UpdateWindow(hwnd);
 
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
    HDC         hdc;
    PAINTSTRUCT ps;
    RECT        rect;
 
    switch (iMsg)
    {
        case WM_CREATE:
            PlaySound(_T("chicken.wav"), NULL, SND_FILENAME | SND_ASYNC);
            return 0;
 
        case WM_PAINT:
            hdc = BeginPaint(hwnd, &ps);
 
            GetClientRect(hwnd, &rect);
 
            DrawText(hdc, _T("Hello, Windows 95!"), -1, &rect,
                DT_SINGLELINE | DT_CENTER | DT_VCENTER);
 
            EndPaint(hwnd, &ps);
            return 0;
 
        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
    }
 
    return DefWindowProc(hwnd, iMsg, wParam, lParam);
}
0
18.01.2018, 23:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2018, 23:23

Класс из RegisterClassEx создаётся только для оного HWND окна? :-)
Привет. Долгое программирование на Qt спровоцировало появление сомнений в...

Почему поток в создаётся в зависимости от функции, которая в нём вызывается?
Почему поток в создаётся в завсимости от функции, которая в нём вызывается? ...

Не создаётся процесс,но при этом нормально запускается прога,т.е без ошибоок
Не создаётся процесс,но при этом нормально запускается,т.е без ошибоок:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru