Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подмена дескриптора родительского окна при вызове 
:(
    Опции темы
constant
Дата 26.10.2011, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 22.7.2011

Репутация: нет
Всего: нет



В оконной процедуре

  
Код

    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)



Пытаюсь при создании главного окна, создать контрол кнопку.

Код

CollapsedExpandedWrap enabledWrap disabledLine numbers onLine numbers off

      case WM_CREATE:
       
      CreateWindow(_T("BUTTON"),_T("OK"),WS_VISIBLE | WS_CHILD,100,100,50,30,hWnd,NULL,NULL,NULL);



При выполнении кнопка не создается, вместо этого происходит следующее. Значение переменной hWnd дескриптора главного окна после выполнения вышеуказанной функции изменяется на другое ! Причем при трассировке выполнение кода не идет дальше, а выполняется опять эта строчка, опять с заменой дескриптора. И так три-четыре раза.
Происходит с контролом BUTTON, c CHECKBOX-ом вроде нет. При этом в предыдущих программах делал тоже самое - все работало !
Интересно было бы разобраться что же все-таки происходит, в столь странном поведении программы. 
PM MAIL   Вверх
vol4ek
Дата 26.10.2011, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 1.5.2011
Где: Минск

Репутация: нет
Всего: 0



что-то ты там намутил. У меня все работает.
Код

#include <windows.h>


LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); 

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR IpszCmdLine,int nCmdShow)
{
    MSG msg;
    //регестрируем класс окна
    WNDCLASS wc;
    wc.style = 0;
    wc.lpfnWndProc = (WNDPROC)WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = LoadIcon (NULL,IDI_WARNING);
    wc.hCursor = LoadCursor (NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wc.lpszMenuName = 0;
    wc.lpszClassName =L"Class";
    if(!RegisterClass(&wc))
        return 0;
    //создаём окно
    HWND hWnd = CreateWindow(L"Class",
        L"title", 
        WS_OVERLAPPEDWINDOW, 
        0,
        0, 
        500,
        500,
        NULL,
        NULL, 
        hInstance,
        NULL); 

    

    if(!hWnd) return 0;
    ShowWindow(hWnd,nCmdShow);
    UpdateWindow(hWnd);



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


LRESULT CALLBACK WndProc(HWND hWnd, UINT message,WPARAM wParam,LPARAM lParam)
{
    switch(message)
    {
    case WM_CREATE:
        {
            CreateWindow(L"BUTTON",L"OK",WS_VISIBLE | WS_CHILD,100,100,50,30,hWnd,NULL,NULL,NULL);
        }
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    case WM_PAINT:
        break;
    default:
        return DefWindowProc(hWnd,message,wParam,lParam);

    }
    return 0;
}

проект VS2010 прилагается.
  


Это сообщение отредактировал(а) vol4ek - 26.10.2011, 21:22

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  api.rar 15,70 Kb
PM MAIL ICQ   Вверх
constant
Дата 27.10.2011, 05:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 22.7.2011

Репутация: нет
Всего: нет



Все ясно. Я просто создаю сэмплы для контролов, чтобы их потом можно было использовать в других проектах. Проект для button -а не мудрствуя лукаво назвал button-ом, использовал стандартнй VS темплейт для создания приложения. В результате в szWindowClass записалась button.

Спасибо большое ElcnU 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0424 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.