Cant create window как исправить

При запуске вылезает табличка - Cant create window. Раньше игра запускалась нормально.Запускаю через Daemon tools. :(

Войти или зарегистрироваться

Не запускается игра.

Тема в разделе «Персональный компьютер», создана пользователем xonnel, 26 сен 2008.

Страница 1 из 2


  1. xonnel

    xonnel
    Well-Known Member

    Сообщения:
    246
    Симпатии:
    12
    Баллы:
    63

    При запуске вылезает табличка — Cant create window. Раньше игра запускалась нормально.Запускаю через Daemon tools. :(


    xonnel,
    26 сен 2008

    #1


  2. The REAL

    The REAL
    Only On NEOG

    Сообщения:
    12.321
    Симпатии:
    1.422
    Баллы:
    623

    Если раньше запускалось, то что-то поменялось с того момента


    The REAL,
    26 сен 2008

    #2


  3. Ken Rosenberg

    Ken Rosenberg
    Well-Known Member

    Сообщения:
    7.501
    Симпатии:
    2.766
    Баллы:
    523

    А чё за игра?


    Ken Rosenberg,
    26 сен 2008

    #3


  4. Bahamut2k

    Bahamut2k
    shpongled

    Сообщения:
    10.147
    Симпатии:
    935
    Баллы:
    523

    Вы пробовали выключить и снова включить компьютер? =)


    Bahamut2k,
    27 сен 2008

    #4


  5. xonnel

    xonnel
    Well-Known Member

    Сообщения:
    246
    Симпатии:
    12
    Баллы:
    63

    Как достать соседа 3 и 4.


    xonnel,
    27 сен 2008

    #5


  6. xonnel

    xonnel
    Well-Known Member

    Сообщения:
    246
    Симпатии:
    12
    Баллы:
    63

    100 раз


    xonnel,
    27 сен 2008

    #6


  7. xonnel

    xonnel
    Well-Known Member

    Сообщения:
    246
    Симпатии:
    12
    Баллы:
    63

    А из-за чего окошко то не можеть быть создано? Может это как то связано с кодеками.Последнее время разные видеофайлы проигрываются только разными прогами.


    xonnel,
    27 сен 2008

    #7


  8. Ken Rosenberg

    Ken Rosenberg
    Well-Known Member

    Сообщения:
    7.501
    Симпатии:
    2.766
    Баллы:
    523

    Слушай, а ты с тех пор как игра у тебя нормально работала Daemon Tools не обновлял?


    Ken Rosenberg,
    27 сен 2008

    #8


  9. xonnel

    xonnel
    Well-Known Member

    Сообщения:
    246
    Симпатии:
    12
    Баллы:
    63

    Сейчас запускаю с другой версией.Со старой версией вообще почему то работать не стало.Требует вставить диск.Хотя раньше проходило без диска.Сейчас стоит версия 4.11.Была 4.0.3.Другие игры запускаются через DT пока нормально.


    xonnel,
    27 сен 2008

    #9


  10. LEONID

    LEONID
    Well-Known Member

    Сообщения:
    10.519
    Симпатии:
    3.228
    Баллы:
    623

    Боян. Уже давным давно вышла версия 4.30.1 :)

    А насчет того, что раньше шло без диска… Дык обновилось что-то через инет и все) Вычислили твоего демона :)


    LEONID,
    27 сен 2008

    #10


  11. Ken Rosenberg

    Ken Rosenberg
    Well-Known Member

    Сообщения:
    7.501
    Симпатии:
    2.766
    Баллы:
    523

    В данном случае придерживаюсь того-же мнения.


    Ken Rosenberg,
    28 сен 2008

    #11


  12. xonnel

    xonnel
    Well-Known Member

    Сообщения:
    246
    Симпатии:
    12
    Баллы:
    63

    Что что-то поменялось и так понятно.Вот узнать бы конкретную причину.Ведь здесь именно не может быть создано окно.А так обычно просто ошибку выдает если что-то не так.


    xonnel,
    28 сен 2008

    #12


  13. UnlimiteD

    UnlimiteD
    New Member

    Сообщения:
    1.594
    Симпатии:
    73
    Баллы:
    0

    Винду переставь.


    UnlimiteD,
    28 сен 2008

    #13


  14. xonnel

    xonnel
    Well-Known Member

    Сообщения:
    246
    Симпатии:
    12
    Баллы:
    63

    Это единственное что остается.Тока боюсь что и это не поможет.Хотя посмотрим.:)


    xonnel,
    28 сен 2008

    #14


  15. The REAL

    The REAL
    Only On NEOG

    Сообщения:
    12.321
    Симпатии:
    1.422
    Баллы:
    623

    неужто такая стоящая вещь, что стоит стольких усилий?


    The REAL,
    29 сен 2008

    #15


  16. Ken Rosenberg

    Ken Rosenberg
    Well-Known Member

    Сообщения:
    7.501
    Симпатии:
    2.766
    Баллы:
    523

    Скорее всего должно помочь.


    Ken Rosenberg,
    29 сен 2008

    #16


  17. borizzz

    borizzz
    New Member

    Сообщения:
    95
    Симпатии:
    5
    Баллы:
    0

    по теме

    При запуске игры не забудь вырубить инет.


    borizzz,
    29 сен 2008

    #17


  18. xonnel

    xonnel
    Well-Known Member

    Сообщения:
    246
    Симпатии:
    12
    Баллы:
    63

    Нет,просто интересно в чем дело.Да и вдруг с другими играми будет тоже самое.Это тоже не помогло.


    xonnel,
    30 сен 2008

    #18


  19. xonnel

    xonnel
    Well-Known Member

    Сообщения:
    246
    Симпатии:
    12
    Баллы:
    63

    Не помогло. Че дальше то делать?:(


    xonnel,
    9 окт 2008

    #19


  20. xonnel

    xonnel
    Well-Known Member

    Сообщения:
    246
    Симпатии:
    12
    Баллы:
    63

    Все заработало только после того как обновила драйвера для видяхи.


    xonnel,
    17 ноя 2008

    #20

(Вы должны войти или зарегистрироваться, чтобы ответить.)

Показать игнорируемое содержимое

Страница 1 из 2

  • Войти через Facebook
  • Войти через Twitter
  • Войти через Google
Ваше имя или e-mail:
У Вас уже есть учётная запись?
  • Нет, зарегистрироваться сейчас.
  • Да, мой пароль:
  • Забыли пароль?

Запомнить меня


Next Stage

Поиск

  • Искать только в заголовках
Сообщения пользователя:

Имена участников (разделяйте запятой).

Новее чем:
  • Искать только в этой теме
  • Искать только в этом разделе
    • Отображать результаты в виде тем

Быстрый поиск

  • Последние сообщения

Больше…

When I launch Visual Studio 2010 Ultimate, I get the error «Cannot create window». Do you know of any solutions?

Venemo's user avatar

Venemo

18.1k11 gold badges86 silver badges122 bronze badges

asked Apr 20, 2010 at 5:51

Max's user avatar

In my case, it was installing IBM Client Access v6.1 service pack SI37891. When it installed the .NET 4 data provider it broke the XML file.

The file in question can be found here:
C:WindowsMicrosoft.NETFrameworkv4.0.30319Configmachine.config

An additional data provider was installed and a spurious XML close tag was added incorrectly:

<DbProviderFactories>
<add name="IBM DB2 for i5/OS .NET Provider" ...... /></DbProviderFactories>
<add name="Microsoft SQL Server Compact Data Provider" ....../>
</DbProviderFactories>

answered Sep 16, 2010 at 10:44

alock's user avatar

alockalock

1011 silver badge3 bronze badges

3

if you install and remove netframework 4.5 maybe it happens, reinstall the netframework 4.5

answered Mar 19, 2013 at 15:08

zamoldar's user avatar

zamoldarzamoldar

52810 silver badges13 bronze badges

The same thing happened to me today for the first time while using VS2010 premium on Windows 7. The only thing different since the last time I used it (16hrs ago) was Windows Update which the System Restore utility says only affected an unrelated local app on my machine, Grooveshark.

Anyway, I restored to the point created immediately before the update, and VS2010 doesn’t complain about not being able to «Create Window» anymore… don’t think this was related to a recent Resharper 5 install.

Hope this helps!

answered May 30, 2010 at 3:27

asadiq's user avatar

I found that my machine.config file was not editable. I couldn’t even open it to look at it. I’m not sure why. I ended up uninstalling .NET framework 4.5 and re-installing .NET framework 4.0. I was also having trouble with Visual Studio 2012. I’m re-installing that now to see if that works. For the record, I have IBM System i Access for Windows installed on my machine. That may have caused the problem to start with.

answered May 28, 2013 at 14:48

Michael Earls's user avatar

Michael EarlsMichael Earls

1,4271 gold badge14 silver badges24 bronze badges

I had this issue when attempting to start up SQL Server Management Studio 2012. Cleaning out the following folders fixed it:

  • %SYSTEMDRIVE%Users<Username>AppDataLocalMicrosoftSQL Server Management Studio
  • %SYSTEMDRIVE%Users<Username>AppDataRoamingMicrosoftSQL Server Management Studio
  • C:Users<Username>AppDataLocalTemp
  • %SYSTEMDRIVE%WindowsTemp

Hope this helps.

answered Jul 16, 2013 at 12:29

Sameer Singh's user avatar

Sameer SinghSameer Singh

1,3481 gold badge20 silver badges47 bronze badges

In my case, inspecting the Event Viewer, I discovered an «Error 1704. An installation for Microsoft .NET Framework is currently suspended».

So the solution was running Windows Update and installing the pending update for .NET.

answered Jan 22, 2015 at 8:11

Lucas Ayala's user avatar

Lucas AyalaLucas Ayala

2,2192 gold badges16 silver badges19 bronze badges

In my case i made same C:WindowsMicrosoft.NETFrameworkv4.0.30319Configmachine.config

So had to delete the double tags of DbProviderFactories that i had in file.

answered Sep 2, 2020 at 11:11

Mr None's user avatar

Run «Visual Studio Installer» and click repair on the affected VS version.

answered Oct 4, 2021 at 17:49

Akalanka Ekanayake's user avatar

Meph2015

15 / 0 / 0

Регистрация: 30.09.2015

Сообщений: 18

1

09.02.2016, 13:19. Показов 1135. Ответов 7

Метки нет (Все метки)


В общем, написал я программку, на windows 7 она работает прекрасно, но на windows 10 не создается окно (код попадает в блок с ошибкой), проблема в том, что у меня нет возможности лично запустить проект на в10, всё что я могу — это скидывать уже откомпилированные экзешники знакомому)) Может кто-нибудь подсказать, в чем может заключаться проблема?

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
#include <Windows.h>
#include <string>
#include "resource.h"
#include <TlHelp32.h>
#include <fstream>
#include "MemReader.h"
 
 
using namespace std;
 
 
HWND hwnd;
HINSTANCE hInstance2;
DWORD64 var;
fstream Logs;
 
LRESULT CALLBACK DS2ZERO(HWND, UINT, UINT, LONG);
 
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR cmdLine, int nCmdShow){
 
    MSG Msg;
    WNDCLASSEX WndClass;
    char name[] = "ClassName";
    hInstance2 = hInstance;
    
    WndClass.style = CS_HREDRAW | CS_VREDRAW;
    WndClass.lpfnWndProc = (WNDPROC)DS2ZERO;
    WndClass.cbClsExtra = 0;
    WndClass.cbWndExtra = 0;
    WndClass.hInstance = hInstance;
    WndClass.hIcon = LoadIcon(hInstance, IDI_APPLICATION);
    WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
    WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    WndClass.lpszMenuName = NULL;
    WndClass.lpszClassName = name;
    WndClass.cbSize = sizeof(WNDCLASSEX);
    WndClass.hIconSm = NULL;
 
    if (!RegisterClassEx(&WndClass)){
        MessageBox(NULL, "Cant register class", "Error", MB_OK);
        exit(1);
    }
 
    HDC hDCScreen = GetDC(NULL);
    int Horres = GetDeviceCaps(hDCScreen, HORZRES);
    int Vertres = GetDeviceCaps(hDCScreen, VERTRES);
    ReleaseDC(NULL, hDCScreen);
 
    hwnd = CreateWindow(name, "DS2RANK", WS_OVERLAPPED | WS_SYSMENU, (Horres / 2) - 300, (Vertres / 2) - 300, 600, 600, NULL, NULL, hInstance, NULL);
 
    if (!hwnd){
        MessageBox(NULL, "Cant create window", "Error", MB_OK);
        exit(1);
    }
 
    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);
    
    while (GetMessage(&Msg, NULL, 0, 0)){
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }
 
    return Msg.wParam;
 
 
}

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Эксперт PHP

3102 / 2587 / 1219

Регистрация: 14.05.2014

Сообщений: 7,231

Записей в блоге: 1

09.02.2016, 13:21

2

Meph2015, какая ошибка? Текст, код ошибки приведите.



0



Meph2015

15 / 0 / 0

Регистрация: 30.09.2015

Сообщений: 18

09.02.2016, 13:23

 [ТС]

3

Просто эта программа при запуске не создает окно, попадает сюда:

C++
1
2
3
4
    if (!hwnd){
        MessageBox(NULL, "Cant create window", "Error", MB_OK);
        exit(1);
    }

Это сообщение и выводится. Проблема только на в10 (у всех), на в7 всё создается нормально.



0



_lunar_

Эксперт С++

3222 / 2481 / 429

Регистрация: 03.05.2011

Сообщений: 5,158

Записей в блоге: 21

09.02.2016, 13:56

4

Цитата
Сообщение от Meph2015
Посмотреть сообщение

Это сообщение и выводится.

в чём проблема поставить брейкпоинт и посмотреть почему функция CreateWindow возвращает NULL.

ну и 100% рабочий код окна для Windows 10

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
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
        case WM_DESTROY:
        {
            PostQuitMessage(0);
            return 0;
        }
    }
    return DefWindowProc(hWnd, message, wParam, lParam);
}
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    WNDCLASSEX wc;
    ZeroMemory(&wc, sizeof(WNDCLASSEX));
    wc.cbSize = sizeof(WNDCLASSEX);
    wc.style = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc = WindowProc;
    wc.hInstance = hInstance;
    wc.hCursor = LoadCursor(0, IDC_ARROW);
    wc.lpszClassName = "WindowClass";
    RegisterClassEx(&wc);
    HWND hWnd = CreateWindowEx(0, "WindowClass", "Test", WS_SYSMENU | WS_MINIMIZEBOX,
        (GetSystemMetrics(SM_CXSCREEN) - 1024) / 2, (GetSystemMetrics(SM_CYSCREEN) - 576) / 2,
        1024, 576, 0, 0, hInstance, 0);
    ShowWindow(hWnd, nCmdShow);
    MSG msg;
    while (1)
    {
        while (PeekMessage(&msg, 0, 0, 0, 1))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        if (msg.message == WM_QUIT) break;
    }
    return (int)msg.wParam;
}



0



15 / 0 / 0

Регистрация: 30.09.2015

Сообщений: 18

09.02.2016, 14:36

 [ТС]

5

Спасибо за код, но проблема обнаружилась в другом. Оказывается, окно не создается на в10 из-за того, что я перевел проект в х64 режим (в свойствах проекта). Просто взял шаблон пустого окошка, в режиме win32 создается, а в х64 — нет (повторюсь, только на в10, при этом сама операционка там стоит 64 битная). Есть способ как-то это исправить? х64 режим этой программе необходим.

Миниатюры

Ошибка при создании окна в Windows 10
 



0



232 / 135 / 19

Регистрация: 10.11.2015

Сообщений: 305

09.02.2016, 19:42

6

Цитата
Сообщение от Meph2015
Посмотреть сообщение

всё что я могу — это скидывать уже откомпилированные экзешники знакомому

Ну дак выведите код ошибки (GetLastError) в MessageBox, и пусть вам знакомый его продиктует. А вообще попробуйте с опцией /Zp8 откомпилировать.



0



15 / 0 / 0

Регистрация: 30.09.2015

Сообщений: 18

09.02.2016, 21:18

 [ТС]

7

jupman, расставил по пути хода WinMain функции MessageBox’ы с GetLastError в 6 разных местах (последнее место там же, где и сообщение о невозможности создать окно), из 6 мессаджей вылезли такие коды — 0 0 1813 0 0 0, 1813 появлялось после заполнения WndClass из-за LoadIcon, после замены хендла в функции на NULL (всё таки иконка системная берется) ошибка пропала. Везде нули, ошибок нет.. не понимаю в чем проблема.
/Zp8 тоже никак не помогло



0



232 / 135 / 19

Регистрация: 10.11.2015

Сообщений: 305

09.02.2016, 22:36

8

Meph2015, ну во первых ошибку нужно проверять только когда функция потерпела неудачу. 1813 — это значит ресурс данного типа в образе отсутствует (ERROR_RESOURCE_TYPE_NOT_FOUND). Вот кстати список кодов: (System Error Codes). В общем залейте exe посмотреть.



0



I am aware of other instances of the «Cannot create the window» problem when starting Visual Studio 2010.

Today it happened to me.  After reinstalling/repair Visual Studio (Professional) 2010 from the installation disk didn’t solve the problem, I restored my Windows 7 (Home Edition) (Running as a Virtual Machine using Oracle’s Virtual Box) back to the state
on 10th January.  Low and behold Visual Studio worked again.

I then worked forward installing Windows Updates in small doses.

Firstly — it appears all attempts to update Office 2007 just fail and have been doing for sometime now.  Not sure why.  However more interestingly, The update to the .NET 4.5 framework labelled KB2858725 definitely causes Visual Studio to stop
working.

I installed it, Visual Studio failed, I restored the system to the restore point just before I installed it and Visual Studio started working again.

The question is how to I let someone know (other than post here like I just have) that there is a problem and this is the cause.

>
Почему не работает CreateWindow

  • Подписаться на тему
  • Сообщить другу
  • Скачать/распечатать тему



Сообщ.
#1

,
28.10.15, 15:42

    Проект на WinAPI без MFC и без ресурсов.
    Почему не отображается диалог, созданный с помощью CreateWindow

    ExpandedWrap disabled

      в главной процедуре обработки сообщений окна:

          case WM_CREATE:

              habout = about.CreateDlg(hwnd, hinst);

          case WM_COMMAND:

              switch (LOWORD(wparam))

              case IDM_START:

                  about.ShowDlg(habout);

    ExpandedWrap disabled

      в классе About

      LRESULT CALLBACK AboutDlgProc(HWND habout, UINT message, WPARAM wparam, LPARAM lparam)

      {

          switch (message)

          {

          case WM_INITDIALOG:

              return TRUE;

          case WM_COMMAND:

              switch (LOWORD(wparam))

              {

              case IDOK:

              case IDCANCEL:

                      EndDialog(habout, TRUE);

                      return TRUE;

              }

          }

          return FALSE;

      }

      HWND About::CreateDlg(HWND hwnd, HINSTANCE hinstance)

      {

          HWND habout;

          WNDCLASS w;

          DWORD dwStyle;

          memset(&w, 0, sizeof(WNDCLASS));

          w.style = CS_HREDRAW | CS_VREDRAW;

          w.lpfnWndProc = AboutDlgProc;

          w.hInstance = hinstance;

          w.hIcon = NULL;

          w.hCursor = LoadCursor(NULL, IDC_ARROW);

          w.hbrBackground = (HBRUSH) (COLOR_BTNFACE + 1);

          w.lpszMenuName = NULL;

          w.lpszClassName = «AboutClass»;

          RegisterClass(&w);

          dwStyle = DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION;

          habout = CreateWindow(«AboutClass», » About», dwStyle, 0, 0, 100, 200, hwnd, NULL, hinstance, NULL);

          //ShowWindow(hwnd, SW_SHOW);

          return habout;

      }

      void About::ShowDlg(HWND habout)

      {

          ShowWindow(habout, SW_SHOW);

      }

    dwStyle перепробовал разные варианты, безрезультатно. Ошибок нет, диалоговое окно не отображается.

    Сообщение отредактировано: Designer — 28.10.15, 15:42

    Wizard

    B.V.



    Сообщ.
    #2

    ,
    28.10.15, 16:22

      Цитата Designer @ 28.10.15, 15:42

      Ошибок нет

      Как это понимать? Как GetLastError == 0?


      Designer



      Сообщ.
      #3

      ,
      28.10.15, 16:29

        В смысле что приложение компилируется, запускается но при попытке вызвать диалог ни ответа, ни привета.
        Я уже попробовал CreateWindowEx и заодно поставил MessageBox

        ExpandedWrap disabled

          HWND About::CreateDlg(HWND hwnd, HINSTANCE hinstance)

          {

              InitCommonControls();

              HWND habout;

              WNDCLASSEX w;

              DWORD dwStyle;

              w.cbSize = sizeof(w);

              w.style = CS_HREDRAW | CS_VREDRAW;

              w.lpfnWndProc = AboutDlgProc;

              w.cbClsExtra = 0;

              w.cbWndExtra = 0;

              w.hInstance = hinstance;

              w.hCursor = LoadCursor(NULL, IDC_ARROW);

              w.hIcon = LoadIcon(NULL, IDI_APPLICATION);

              w.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

              w.hbrBackground = (HBRUSH) (COLOR_BTNFACE + 1);

              w.lpszMenuName = 0;

              w.lpszClassName = «AboutClass»;

              if (!RegisterClassEx(&w)) MessageBox(NULL, «Cannot register class», «Error», MB_OK | MB_ICONSTOP);

              dwStyle = WS_CHILD | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION;

              habout = CreateWindowEx(WS_EX_WINDOWEDGE, «AboutClass», » About», dwStyle, 0, 0, 100, 200, hwnd, NULL, hinstance, NULL);

              if(!habout) MessageBox(NULL, «Cannot create window», «Error», MB_OK | MB_ICONSTOP);

              //ShowWindow(hwnd, SW_SHOW);

              return habout;

          }

          void About::ShowDlg(HWND habout)

          {

              ShowWindow(habout, SW_SHOW);

              //UpdateWindow(habout);

          }

        Добавлено 28.10.15, 16:32
        Выводится сообщение «Cannot create window» класс регистрируется, но окно не создается, почему ?

        Сообщение отредактировано: Designer — 28.10.15, 16:32

        Wizard

        B.V.



        Сообщ.
        #4

        ,
        28.10.15, 16:34

          Цитата Designer @ 28.10.15, 16:29

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

          Цитата MSDN

          CreateWindow

          If the function succeeds, the return value is a handle to the new window.
          If the function fails, the return value is NULL. To get extended error information, call GetLastError.


          Славян



          Сообщ.
          #5

          ,
          28.10.15, 16:42

            Цитата Designer @ 28.10.15, 16:29

            ExpandedWrap disabled

              dwStyle = WS_CHILD | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION;

            Цитата

            WS_CHILD The window is a child window. A window with this style cannot have a menu bar. This style cannot be used with the WS_POPUP style.

            Добавлено 28.10.15, 16:43

            Цитата

            WS_POPUPWINDOW = (WS_POPUP | WS_BORDER | WS_SYSMENU)


            ЫукпШ



            Сообщ.
            #6

            ,
            28.10.15, 21:54

              Цитата Designer @ 28.10.15, 15:42

              Проект на WinAPI без MFC и без ресурсов.

              Почитай книгу:
              Том1
              Том2
              диск с учебными исходниками к книге


              Designer



              Сообщ.
              #7

              ,
              29.10.15, 15:46

                ЫукпШ спасибо, хорошая книга.
                Попробовал GetLastError

                Прикреплённая картинка

                Прикреплённая картинка


                По MSDN ошибка № 1813 что это может быть ?

                Я так подозреваю, что без использования ресурсов, все упирается в отсутствие так называемого шаблона диалога. С помощью шаблона в предыдущей теме получилось создать диалоговое окно. Но оно очень ущербное. А в функции CreateWindowEx нет шаблона.

                Добавлено 29.10.15, 15:56
                PS Почитаю Petzold-а, может что и прояснится.

                Сообщение отредактировано: Designer — 29.10.15, 15:57


                Славян



                Сообщ.
                #8

                ,
                29.10.15, 16:05

                  Скорее всего, не та ошибка, что вы привели, а эта:

                  Цитата winError.H

                  ExpandedWrap disabled

                    //

                    // MessageId: ERROR_RESOURCE_TYPE_NOT_FOUND

                    //

                    // MessageText:

                    //

                    // The specified resource type cannot be found in the image file.

                    //

                    #define ERROR_RESOURCE_TYPE_NOT_FOUND    1813L

                  Wizard

                  B.V.



                  Сообщ.
                  #9

                  ,
                  29.10.15, 16:12

                    Сейчас обратил внимание, что у автора AboutDlgProc для диалогового окна, а не для CreateWindow, требующей вызова DefWindowProc.


                    Designer



                    Сообщ.
                    #10

                    ,
                    29.10.15, 16:32

                      B.V. Из приведенных мной фрагментов может не все понятно. Но у меня есть две функции обработки сообщений
                      1) для

                      ExpandedWrap disabled

                        int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)

                        w.lpfnWndProc = WndProc;

                      ExpandedWrap disabled

                        LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)

                        return DefWindowProc(hwnd, message, wparam, lparam);

                      2) для

                      ExpandedWrap disabled

                        HWND About::CreateDlg(HWND hwnd, HINSTANCE hinstance)

                        w.lpfnWndProc = AboutDlgProc;

                      ExpandedWrap disabled

                        LRESULT CALLBACK AboutDlgProc(HWND habout, UINT message, WPARAM wparam, LPARAM lparam)

                        // здесь нет DefWindowProc в литературе читал что и не надо.

                      Завтра приведу исходник. (Исходник на работе, интернет дома)

                      Wizard

                      B.V.



                      Сообщ.
                      #11

                      ,
                      29.10.15, 16:48

                        Цитата Designer @ 29.10.15, 16:32

                        // здесь нет DefWindowProc в литературе читал что и не надо.

                        DefWindowProc надо всегда, если окно создается посредством CreateWindow[Ex]


                        Designer



                        Сообщ.
                        #12

                        ,
                        29.10.15, 16:56

                          Ок, завтра попробую.


                          Designer



                          Сообщ.
                          #13

                          ,
                          30.10.15, 14:49

                            Действительно, DefWindowProc помогло, диалог отображается.

                            правда, диалог ни капли не модальный несмортря на стиль DS_MODALFRAME;
                            сделал родительскому окну EnableWindow(hwnd, FALSE);
                            стал диалог модальный все как и надо, но теперь другая беда — как родителя опять сделать Enable ? когда закрываем диалог;
                            напрашивается послать SendMessage родителю

                            ExpandedWrap disabled

                              LRESULT CALLBACK AboutDlgProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)

                              {

                                  HWND hparent = GetParent(hwnd);

                                  switch (message)

                                  {

                                  case WM_INITDIALOG:

                                      return 0;

                                  case WM_COMMAND:

                                      switch (LOWORD(wparam))

                                      {

                                      case IDOK:

                                      case IDCANCEL:

                                          EndDialog(hwnd, TRUE);

                                          //EnableWindow(hparent, TRUE); // <- эти 2 строки не помогли

                                          //SetFocus(hparent);

                                          //SendMessage(hparent, WM_COMMAND, LOWORD(IDC_ABOUT_CANCEL),  0); // <- тогда решил послать сообщение родителю

                                          return 0;

                                      }

                                  }

                                  return DefWindowProc(hwnd, message, wparam, lparam);

                              }

                              LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)

                              {

                                  switch (message)

                                  {

                                  case WM_CREATE:

                                      form.CreateGeneralMenu(hwnd);

                                      htoolbar = form.CreateToolbar(hwnd, hinst);

                                      hpicturebox = form.CreatePictureBox(hwnd, hinst);

                                      about.CreateDlg(hinst);

                                  case WM_SIZE:

                                      form.Resize(hwnd, htoolbar, hpicturebox);

                                      return 0;

                                  case WM_COMMAND:

                                      switch (LOWORD(wparam))

                                      {

                                      case IDM_EXIT:

                                          SendMessage(hwnd, WM_CLOSE, NULL, NULL);

                                          break;

                                      case IDM_OPTIONS:

                                          break;

                                      case IDM_ABOUT:

                                      case IDM_START:

                                          habout = about.ShowDlg(hwnd, hinst);

                                          break;

                                      //case IDC_ABOUT_CANCEL:          // <- родитель получает сообщение и должен стать Enable

                                      //  EnableWindow(hwnd, TRUE);

                                      //  SetFocus(hwnd);

                                      //  break;

                                      }

                                      return 0;

                                  case WM_ERASEBKGND:

                                      return 0;

                                  case WM_DESTROY:

                                      PostQuitMessage(0);

                                      return 0;

                                  }

                                  return DefWindowProc(hwnd, message, wparam, lparam);

                              }


                            Прикреплённый файлПрикреплённый файлsource.rar (21,22 Кбайт, скачиваний: 79)


                            Прикреплённый файлПрикреплённый файлrelease.rar (97,51 Кбайт, скачиваний: 75)

                            Варианты моих действий (наверное неправильных) я закоментировал, а как сделать модальный диалог правильно?

                            Wizard

                            B.V.



                            Сообщ.
                            #14

                            ,
                            30.10.15, 15:53

                              Цитата Designer @ 30.10.15, 14:49

                              правда, диалог ни капли не модальный несмортря на стиль DS_MODALFRAME;

                              Диалоговые стили не поддерживаются функциями CreateWindow[Ex]

                              Цитата Designer @ 30.10.15, 14:49

                              а как сделать модальный диалог правильно?

                              Не изобретая велосипед, воспользоваться функциями DialogBox[Indirect/Param]

                              Цитата Designer @ 30.10.15, 14:49

                              EndDialog(hwnd, TRUE);

                              Это диалоговая функция.
                              Оконные функции Windows завершаются вызовом DestroyWindow.


                              reinterpret_alexey



                              Сообщ.
                              #15

                              ,
                              30.10.15, 15:59

                                Full Member

                                ***

                                Рейтинг (т): 13

                                Made my day :D

                                user posted image

                                Сообщение отредактировано: reinterpret_alexey — 30.10.15, 16:00


                                ЫукпШ



                                Сообщ.
                                #16

                                ,
                                30.10.15, 17:00

                                  Цитата Designer @ 30.10.15, 14:49

                                  сделал родительскому окну EnableWindow(hwnd, FALSE);
                                  стал диалог модальный все как и надо, но теперь другая беда — как родителя опять сделать Enable ?

                                  ExpandedWrap disabled

                                    EnableWindow(hwnd, TRUE);


                                  Designer



                                  Сообщ.
                                  #17

                                  ,
                                  30.10.15, 17:15

                                    Цитата

                                    EnableWindow(hwnd, TRUE)

                                    так это я понял, а куда это поставить? В процедуру обработки сообщений от AboutDlgProc() не помогло, а если в процедуру обработки сообщений родителя WndProc(), то не знаю как его там вызвать. В коде я закоментировал мои пробы.


                                    ЫукпШ



                                    Сообщ.
                                    #18

                                    ,
                                    30.10.15, 18:04

                                      Цитата Designer @ 30.10.15, 17:15

                                      так это я понял, а куда это поставить?

                                      В сообщение WM_CLOSE диалога.
                                      Именно так я и делаю.
                                      Вот кусочек:

                                      ExpandedWrap disabled

                                        void WINAPI PMDLG::enableParent(void)

                                        {

                                         Hide();

                                         if(hwndMain) ::EnableWindow(hwndMain,TRUE);

                                         ::EnableWindow     (hwndParent,TRUE);

                                         ::SetFocus         (hwndParent);

                                         ::BringWindowToTop (hwndParent);

                                        }

                                      «EndDialog» совершенно не нужен и очень вреден.

                                      Wizard

                                      B.V.



                                      Сообщ.
                                      #19

                                      ,
                                      30.10.15, 18:09

                                        ЫукпШ, твой подход не является решением проблемы автора. Давать неправильное решение хуже, чем не давать никакого


                                        ЫукпШ



                                        Сообщ.
                                        #20

                                        ,
                                        30.10.15, 18:20

                                          Цитата B.V. @ 30.10.15, 18:09

                                          ЫукпШ, твой подход не является решением проблемы автора. Давать неправильное решение хуже, чем не давать никакого

                                          Откуда ты знаешь, какие проблемы автора и как лучше их решать ?
                                          Я отвечаю на его конкретный вопрос и решение по этому поводу буду принимать сам.

                                          Wizard

                                          B.V.



                                          Сообщ.
                                          #21

                                          ,
                                          30.10.15, 22:03

                                            Цитата ЫукпШ @ 30.10.15, 18:20

                                            Откуда ты знаешь, какие проблемы автора и как лучше их решать ?

                                            У меня просто с памятью немного получше: Как создать модальное диалоговое окно (сообщение #3631052)

                                            Цитата ЫукпШ @ 30.10.15, 18:20

                                            Я отвечаю на его конкретный вопрос и решение по этому поводу буду принимать сам.

                                            А если он спросит, как засунуть пальцы в розетку, ты ему инструкцию по разборке розетки предложишь?


                                            Designer



                                            Сообщ.
                                            #22

                                            ,
                                            31.10.15, 20:41

                                              Нет, нет, уважаемые все нормально, вы мне оба очень помогли
                                              B.V.

                                              ExpandedWrap disabled

                                                DefWindowProc

                                                DestroyWindow

                                              ЫукпШ

                                              ExpandedWrap disabled

                                                WM_CLOSE

                                                 ::EnableWindow     (hwndParent,TRUE);

                                                 ::SetFocus         (hwndParent);

                                                 ::BringWindowToTop (hwndParent);

                                              В своей программе я, естественно, все приспособил под свои нужды. Иногда, даже намек в сторону правильного решения здорово помогает.
                                              Итог : Стало понятно, что диалоговое окно без ресурсов можно создавать двумя способами.
                                              1) с помощью шаблона диалога.
                                              2) с помощью функции CreateWindow[Ex]

                                              Мои ошибки:
                                              1) По незнанию, я все время пытался «смешать» эти два способа.
                                              2) Выяснилась одна неприятная особенность Visual Studio (может это только у меня) : Студийное окно мое maximize все время лезет поверх приложения. Поэтому в самостоятельной попытке найти решение методом перебора вариантов куда поставить нужные функции я пропустил верное решение. Предполагал, что если главное окно приложения станет активным, после закрытия диалога, то окно будет на экране активное развернуто как в любом приложении. А оно висело все время свернутое. При верном рабочем варианте я решил, что раз главное окно сворачивается при закрытии диалога, то значит оно не стало EnableWindow / SetFocus / BringWindowToTop. На самом деле оно стало EnableWindow / SetFocus, а BringWindowToTop перекрыла студия. Если запускать приложение без студии — все нормально.

                                              Тут вина скорее моя, что не точно сформулировал вопрос. Но точно формулировать вопрос, порой возможно только если знаешь на него ответ.

                                              Сообщение отредактировано: Designer — 31.10.15, 20:41

                                              Wizard

                                              B.V.



                                              Сообщ.
                                              #23

                                              ,
                                              01.11.15, 15:38

                                                Цитата Designer @ 31.10.15, 20:41

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

                                                Неверно. Диалоговым окно, созданное посредством CreateWindow[Ex] не является, если опираться на терминологию Windows. Диалоговые окна — это не только модальность, у них есть целый ряд собственных особенностей: https://msdn.microsoft.com/en-us/library/wi…p/ms644995.aspx. Диалоговые окна следует рассматривать как более высокоуровневую надстройку над CreateWindow[Ex], а не как аналог. Повторить функциональность диалоговых окон нативными функциями, конечно, можно, но тут возникает закономерный вопрос — а зачем?

                                                Guru

                                                ElcnU



                                                Сообщ.
                                                #24

                                                ,
                                                04.11.15, 15:40

                                                  Цитата B.V. @ 01.11.15, 15:38

                                                  но тут возникает закономерный вопрос — а зачем?

                                                  ну делали ж такое лет так семь назад, было просто интересно :yes:
                                                  а сейчас, наверное, актуальность таких вещей стремиться к нулю :yes-sad:

                                                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

                                                  0 пользователей:

                                                  • Предыдущая тема
                                                  • C/C++: Системное программирование и WinAPI
                                                  • Следующая тема

                                                  [ Script execution time: 0,1078 ]   [ 20 queries used ]   [ Generated: 9.02.23, 08:42 GMT ]  

                                                  Понравилась статья? Поделить с друзьями:
                                                • Cant complete world script module dayz ошибка как исправить
                                                • Canon принтер ошибка 1686
                                                • Canon принтер код ошибки 5100 canon
                                                • Canon п1400 ошибка 5b00
                                                • Canon ошибка службы 5100 mp160