Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.10.2012, 22:50   #1
Gengarww
Новичок
Джуниор
 
Регистрация: 04.10.2012
Сообщений: 4
По умолчанию Как из библиотеки в которой описан класс окна и указана иконка вывести эту иконку в окне которое создается в основном файле?

Доброго времени суток всем!

1. Создал проект
2. Создал заголовочный файл test.h
Содержимое:
Код C++

Код:
#include "resource.h"
 
#define IDI_ICON1   101
 
HINSTANCE hInst;
HWND hWnd, hWnd_Ch; 
 
class CWin
    {
      public:
 
          static LRESULT CALLBACK ChildProc(HWND hwnd, UINT Message, WPARAM wparam,LPARAM lparam)
             {
                 if (Message == WM_DESTROY )
                     {
                         return 0;
                     }
                 
                 return DefWindowProc(hwnd,Message,wparam,lparam);
             }
 
         static LRESULT CALLBACK WndProc(HWND hwnd, unsigned int msg, WPARAM wParam,LPARAM lParam)
             {
                 hWnd_Ch = hwnd;
 
                 if(msg==WM_DESTROY)
                     {
                         PostQuitMessage(0);
                         return 0L;
                     }
                 return (DefWindowProc(hwnd, msg, wParam, lParam));
             }
 
         void mwin(HINSTANCE hInst, int nCmdShow, DWORD WinStyleEx,
                   LPCTSTR WinName, DWORD WinStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, 
                   HMENU hMenu, LPVOID lpParam, LPCTSTR szClassName, int wColor, LPCTSTR lpCursorName, WNDPROC wPr)
                   {
 
                       WNDCLASSEX WindowClass;    //Создать объект класса окна
 
                       WindowClass.cbSize = sizeof(WNDCLASSEX);                         
                       WindowClass.style = CS_HREDRAW | CS_VREDRAW;  
                       WindowClass.lpfnWndProc = wPr;                               
                       WindowClass.cbClsExtra = NULL;                                   
                       WindowClass.cbWndExtra = NULL;                                   
                       WindowClass.hInstance = hInst;                               
                       WindowClass.hIcon = LoadIcon(hInst,MAKEINTRESOURCE(IDI_ICON1)); 
                       WindowClass.hCursor = LoadCursor(0, lpCursorName);                  
                       WindowClass.hbrBackground = static_cast<HBRUSH>(GetStockObject(wColor)); 
                       WindowClass.lpszMenuName = NULL;                                 
                       WindowClass.lpszClassName = szClassName;                           
                       WindowClass.hIconSm = NULL;                                      
 
                       RegisterClassEx(&WindowClass);
 
                       hWnd = CreateWindowEx(
                           WinStyleEx,                         
                           szClassName,                          
                           WinName,                            
                           WinStyle ,
                           x,                                  
                           y,                                  
                           nWidth,                             
                           nHeight,                            
                           hWndParent,                         
                           hMenu,                              
                           hInst,                          
                           lpParam                             
                           );
 
                       ShowWindow(hWnd, nCmdShow);           
                       UpdateWindow(hWnd);                   
                   }
 
          int mmwin(void)
          {
                       MSG msg;        
 
                       while (GetMessage(&msg, 0, 0, 0) == TRUE)   
                           {
                               TranslateMessage(&msg);                   
                               DispatchMessage(&msg);                    
                           }
                       
                       return static_cast<int>(msg.wParam);
          }
     };

3. Создал исходный файл test.cpp
Содержимое:
Код C++

Код:
#include <windows.h>
#include "test.h"
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    CWin cw1;
 
    cw1.mwin(hInst, nCmdShow, WS_EX_WINDOWEDGE,
             L"ParentWindow", WS_TILEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 
             NULL, NULL, NULL, L"ParentWindow", LTGRAY_BRUSH, IDC_ARROW, cw1.WndProc);
 
    cw1.mwin(hInst, nCmdShow, NULL,
             L"ChildrenWindow", WS_CHILD | WS_BORDER | WS_VISIBLE, 10, 10, 200, 200, 
             hWnd_Ch, NULL, NULL, L"ChildrenWindow", WHITE_BRUSH, IDC_HAND, cw1.ChildProc);
   
    cw1.mmwin();
}
Вопрос - Подскажите, пожалуйста, Как из библиотеки в которой описан класс окна и указана иконка вывести эту иконку в окне которое создается в основном файле? (Если создаю проект без заголовочного файла *.h, то там иконку могу вывести, а тут не получается )
Gengarww вне форума Ответить с цитированием
Старый 05.10.2012, 09:46   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

А вы уверены, что у вас есть такая икона?


Если да, то почему IDI_ICON1 дефинирурется в test.h, ведь икона в .rc файле, который загружает resource.h

PS.
Для того, чтоб НЕ передавать какоето сообщение в DefWindowProc нужна очень веская причина, а у вас это сплошь и рядом
waleri вне форума Ответить с цитированием
Старый 05.10.2012, 17:27   #3
Gengarww
Новичок
Джуниор
 
Регистрация: 04.10.2012
Сообщений: 4
По умолчанию

вы мне просто объясните, пожалуйста, как мне вывести мою иконку в заголовке окна? Иконка точно есть, я ее сам добавлял! Допустим, что эта строчка лишняя #define IDI_ICON1 101... дело это не меняет. Программа работает, окна рисуются. Как вставить свою иконку?

P.S. Если что то неверно написал, подскажите, я исправлю. Буду учиться правильно писать.
Gengarww вне форума Ответить с цитированием
Старый 06.10.2012, 03:40   #4
StIX-S
Пользователь
 
Регистрация: 24.06.2011
Сообщений: 69
По умолчанию

Код:
WindowClass.hIconSm = NULL;
заменить на:
WindowClass.hIconSm = WindowClass.hIcon;
StIX-S вне форума Ответить с цитированием
Старый 06.10.2012, 14:15   #5
Gengarww
Новичок
Джуниор
 
Регистрация: 04.10.2012
Сообщений: 4
По умолчанию

не помогло
Gengarww вне форума Ответить с цитированием
Старый 06.10.2012, 16:38   #6
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

А вы проверили что возвращает LoadIcon()?
waleri вне форума Ответить с цитированием
Старый 06.10.2012, 17:55   #7
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

у вас два раза объявлена переменная HINSTANCE hInst : как глобальная переменная и как параметр функции mwin...
counter вне форума Ответить с цитированием
Старый 07.10.2012, 13:30   #8
Gengarww
Новичок
Джуниор
 
Регистрация: 04.10.2012
Сообщений: 4
По умолчанию

как проверить?
Gengarww вне форума Ответить с цитированием
Старый 07.10.2012, 17:46   #9
kovalev
 
Аватар для kovalev
 
Регистрация: 06.10.2012
Сообщений: 5
Сообщение

Цитата:
вывести эту иконку в окне которое создается в основном файле?
Например, можно так:

Код:
  {$R resources.res}



  //
  //
  //



  SendMessage(Win, WM_SETICON, 0, LoadIcon(hInstance, 'MAINICON'));

  //

  while GetMessage(Msg, 0, 0, 0) do
  begin
    TranslateMessage(Msg);
    DispatchMessage(Msg)
  end;
END.  // End of Program.

Файл resources.rc:
Код:
MAINICON ICON "1.ico"

Последний раз редактировалось kovalev; 07.10.2012 в 17:48.
kovalev вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как из диапазона вывести число, которое первое удовлетворит одному из условий fury1986 Microsoft Office Excel 1 12.08.2012 10:11
Как создать эскиз UserControl во всплывающем окне? Сделать всплывающие окна, как в Windows 7 AnutkaSolnce Windows Forms 1 09.06.2011 07:30
Как найти hwnd окна, которое вызывается кнопкой "Пуск"? marina15056 Помощь студентам 0 11.10.2010 17:20
Как можна поменять старую иконку на новую в exe файле? Programmer20101 Общие вопросы Delphi 3 18.05.2010 23:55
в каком виде хранится иконка в Exe-файле? как её из него вытащить/заменить? Holly1444 Общие вопросы Delphi 0 18.11.2006 13:56