Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: показ окна  (Прочитано 20141 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
aleksk
Гость
« : 17-07-2006 19:54 » 

Подскажите плз. как показать окно при нажатии мыши в другов окне???
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 17-07-2006 20:01 » 

aleksk, телепаты в отпуске! Подробнее пиши! Что за "другое окно"? Оно принадлежит твоей программе, или другой? В чем сложность?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 17-07-2006 20:02 » 

aleksk, и ещё - в чём пишешь и сколько уже пишешь Улыбаюсь
Записан

aleksk
Гость
« Ответ #3 : 17-07-2006 20:13 » 

Писать тока начал.Нарисовал главное окно с кнопкой.Создал другое окно которое хочу покозать вместо или поверх этого прои нажатии кнопки.
Пишу VC 2003.NET  на Win32Api.Спасибо!!!
Записан
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #4 : 18-07-2006 05:06 » 

почитай про ShowWindow
Записан

Удачного всем кодинга! -=x[PooH]x=-
aleksk
Гость
« Ответ #5 : 18-07-2006 05:15 » 

Пробовал с разными опциями,в Main-е работает в обработчике LBUTTONDOWN дочернего окна не работает.
Записан
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #6 : 18-07-2006 06:46 » 

код в студию!

а сам обработчик работает?
Записан

Удачного всем кодинга! -=x[PooH]x=-
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 18-07-2006 07:40 » 

aleksk, и пиши понятнее!
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
aleksk
Гость
« Ответ #8 : 18-07-2006 19:45 » 

Код:
HINSTANCE hI;
WNDCLASS wc;
HWND htestwnd, hmainwnd;

HWND hmainwnd = CreateWindow (szClassName, NULL, WS_POPUP, 0, 0, 800, 600, HWND_DESKTOP, NULL, hInst, NULL);
ShowWindow (hmainwnd, SW_SHOWNORMAL);

har szButtClassName[]="ButtWindow";
wc.lpfnWndProc   = ButtProc;
wc.lpszClassName = szButtClassName;
wc.hbrBackground = GetStockBrush (BLACK_BRUSH);
RegisterClass (&wc);

HWND hbuttwnd = CreateWindow (szButtClassName, NULL, WS_CHILDWINDOW | WS_VISIBLE ,
                                      0, 464, 344, 88, hwnd, NULL, hI, NULL);
   
HWND htestwnd = CreateWindow (szTestClassName, NULL, WS_POPUP,
                                      0, 0, 800, 600, hwnd, NULL, hI, NULL);

LRESULT CALLBACK ButtProc (HWND hbuttwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
HANDLE_MSG (hbuttwnd, WM_CREATE, OnButtCreate);
HANDLE_MSG (hbuttwnd, WM_PAINT, OnButtPaint);
HANDLE_MSG (hbuttwnd, WM_DESTROY, OnButtDestroy);
HANDLE_MSG (hbuttwnd, WM_LBUTTONDOWN, OnButtLButtonDown);
HANDLE_MSG (hbuttwnd, WM_LBUTTONUP, OnButtLButtonUp);

default:
return (DefWindowProc (hbuttwnd, msg, wParam, lParam));
}

void OnButtLButtonDown (HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlag)
{   
     ShowWindow (htestwnd, SW_SHOW);
}
« Последнее редактирование: 18-07-2006 19:55 от Finch » Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #9 : 18-07-2006 20:04 » 

aleksk, Круто у тебя понадергано. После ShowWindow нужно делать UpdateWindow. Чтобы окно себя прорисовало. ShowWindow не дает команду на перерисовку окна.

И еше одно
Код:
HWND htestwnd = CreateWindow (szTestClassName, NULL, WS_POPUP, 
                                      0, 0, 800, 600, hwnd, NULL, hI, NULL);
Попапные окна не могут быть дочерними, ты же его объявляеш дочерним и зависяшим от окна с хэндлом hwnd
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
aleksk
Гость
« Ответ #10 : 18-07-2006 20:16 » 

Спасибо большое!!!!!!!!!!!!!!!!!!!
Записан
aleksk
Гость
« Ответ #11 : 18-07-2006 20:20 » 

HWND htestwnd = CreateWindow (szTestClassName, NULL, WS_CHILDWINDOW,
                                            0, 0, 800, 600, hwnd, NULL, hI, NULL);

void OnButtLButtonDown (HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlag)
{   
 
   ShowWindow (htestwnd, SW_SHOW);
   UpdateWindow ( htestwnd);
   

Все равно не работает???
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #12 : 18-07-2006 20:26 » new

aleksk, А второе замечание не видим? Зачем hwnd?  Поставь NULL
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
aleksk
Гость
« Ответ #13 : 19-07-2006 20:11 » 

И так тоже не работает

HWND htestwnd = CreateWindow (szTestClassName, NULL, WS_OVERLAPPEDWINDOW ,
                                            0, 0, 800, 600,  NULL, NULL, hInst, NULL);
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #14 : 19-07-2006 20:23 » 

Тогда дай полный текст. В какой функции и что за чем идет. Прямых ошибоу из кусков, того что ты дал, я лично не вижу. Желательно полностью привести, как ты регистрируеш классы окон.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #15 : 19-07-2006 20:28 » 

Кстати твоё HWND htestwnd,  говорит о том что htestwnd в функции создания окна и в функции OnButtLButtonDown это разные переменные. Так что без полной структуры программы, невозможно засечь ошибку. В Дебагере поставь брэкпоинты и просмотри через watch состояние переменных.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
aleksk
Гость
« Ответ #16 : 19-07-2006 20:43 » 

 HWND htestwnd глобальная переменная
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #17 : 19-07-2006 20:49 » 

Пожайлуста полный листинг. Чтобы видеть структуру программы. Ошибка может сидеть и не в этой засаде, что ты привел.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
aleksk
Гость
« Ответ #18 : 19-07-2006 20:52 » 

HINSTANCE hI;
WNDCLASS wc;
HWND htestwnd, hmainwnd;

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
BOOL OnCreate (HWND, LPCREATESTRUCT);
void OnPaint (HWND);
void OnDestroy (HWND);
void OnLButtonDown (HWND, BOOL, int, int, UINT);


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

LRESULT CALLBACK ButtProc (HWND, UINT, WPARAM, LPARAM);
BOOL OnButtCreate (HWND, LPCREATESTRUCT);
void OnButtPaint (HWND);
void OnButtDestroy (HWND);
void OnButtLButtonDown (HWND, BOOL, int, int, UINT);
void OnButtLButtonUp (HWND, int, int, UINT);




int WINAPI WinMain (HINSTANCE hInst, HINSTANCE, LPSTR, int)
{
   char szClassName[]    ="MainWindow";
   char szTitle[]        = "MyProga";
   MSG Msg;
     
      
   hI = hInst;
    

   ZeroMemory (&wc, sizeof(wc));
   wc.lpfnWndProc   = WndProc;
   wc.hInstance     = hInst;
   wc.hIcon         = LoadIcon (NULL, IDI_APPLICATION);
   wc.hCursor       = LoadCursor (NULL, IDC_HAND);
   wc.hbrBackground = GetStockBrush (LTGRAY_BRUSH);
   wc.lpszClassName = szClassName;
   RegisterClass (&wc);
    
   
   HWND hmainwnd = CreateWindow (szClassName, NULL, WS_OVERLAPPEDWINDOW, 0, 0, 800, 600, HWND_DESKTOP, NULL, hInst, NULL);
   ShowWindow (hmainwnd, SW_SHOWNORMAL);

   

   while (GetMessage (&Msg, NULL, 0, 0))
      DispatchMessage (&Msg);
   return 0;
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
   switch (msg)
   {
      HANDLE_MSG (hwnd, WM_CREATE, OnCreate);    
      HANDLE_MSG (hwnd, WM_PAINT, OnPaint);
      HANDLE_MSG (hwnd, WM_DESTROY, OnDestroy);
        HANDLE_MSG (hwnd, WM_LBUTTONDOWN, OnLButtonDown);
      //HANDLE_MSG (hwnd, WM_LBUTTONUP, OnLButtonUp);  

   default:
      return (DefWindowProc (hwnd, msg, wParam, lParam));
   }
}


BOOL OnCreate (HWND hwnd, LPCREATESTRUCT)
{
 char szButtClassName[]="ButtWindow";
   wc.lpfnWndProc   = ButtProc;
   wc.lpszClassName = szButtClassName;
   wc.hbrBackground = GetStockBrush (BLACK_BRUSH);
   RegisterClass (&wc);

   HWND hbuttwnd = CreateWindow (szButtClassName, NULL, WS_CHILDWINDOW | WS_VISIBLE ,
                                            0, 464, 344, 88, hwnd, NULL, hI, NULL);
       
    
    
    ZeroMemory (&wc, sizeof(wc));

    char szTestClassName[]="TestWindow";
   wc.lpfnWndProc   = TestWndProc;
   wc.lpszClassName = szTestClassName;
    wc.hCursor       = LoadCursor (NULL, IDC_HAND);
   wc.hbrBackground = GetStockBrush (BLACK_BRUSH);
   RegisterClass (&wc);
    
    HWND htestwnd = CreateWindow (szTestClassName, NULL, WS_OVERLAPPEDWINDOW ,
                                            0, 0, 800, 600,  NULL, NULL, hI, NULL);
   
  
   return TRUE;
}

 void OnPaint (HWND hwnd)
{
   PAINTSTRUCT ps;
   HDC hdc = BeginPaint (hwnd, &ps);
   BitBlt (hdc, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY);
   EndPaint (hwnd, &ps);
}

void OnDestroy (HWND)
{
   
   
   DeleteMixer ();
   DeleteBitmap (hBitmap);
   SelectBitmap (hdcMem, hOldBitmap);
   DeleteDC (hdcMem);
   PostQuitMessage (0);
}



LRESULT CALLBACK TestWndProc (HWND htestwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
       return (DefWindowProc (htestwnd, msg, wParam, lParam));
}



LRESULT CALLBACK ButtProc (HWND hbuttwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
   switch (msg)
   {
      HANDLE_MSG (hbuttwnd, WM_CREATE, OnButtCreate);    
      HANDLE_MSG (hbuttwnd, WM_PAINT, OnButtPaint);
      HANDLE_MSG (hbuttwnd, WM_DESTROY, OnButtDestroy);
      HANDLE_MSG (hbuttwnd, WM_LBUTTONDOWN, OnButtLButtonDown);
      HANDLE_MSG (hbuttwnd, WM_LBUTTONUP, OnButtLButtonUp);

   default:
      return (DefWindowProc (hbuttwnd, msg, wParam, lParam));
   }
}

void OnButtLButtonDown (HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlag)
{  
    ShowWindow (htestwnd, SW_SHOWNORMAL);
   UpdateWindow ( htestwnd);
  
    
   MessageBeep (MB_OK);

   ButtonPush =1;
   InvalidateRect (hwnd, NULL, FALSE);
    
}

void OnButtLButtonUp (HWND hwnd, int x, int y, UINT keyFlag)
{
   ButtonPush =0;
   InvalidateRect (hwnd, NULL, FALSE);
   
}
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #19 : 19-07-2006 20:58 » 

Код:
BOOL OnCreate (HWND hwnd, LPCREATESTRUCT)
{
 char szButtClassName[]="ButtWindow";
   wc.lpfnWndProc   = ButtProc;
   wc.lpszClassName = szButtClassName;
   wc.hbrBackground = GetStockBrush (BLACK_BRUSH);
   RegisterClass (&wc);

   HWND hbuttwnd = CreateWindow (szButtClassName, NULL, WS_CHILDWINDOW | WS_VISIBLE ,
                                            0, 464, 344, 88, hwnd, NULL, hI, NULL);
Ты извини меня. но это все таки локальная переменная для функции OnCreate. Ты нарушил условия зоны видимости.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
aleksk
Гость
« Ответ #20 : 19-07-2006 21:09 » 

Во я лоханулся !!!!!
Позор мне !!!!
Спасибо БОЛЬШОЕ!!!!
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines