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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с ресурсами 
V
    Опции темы
HellanD
Дата 5.9.2006, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Подскажите плиз что в коде не так!
Я создал картинку (.bmp), в студийном редакторе ресурсов и хочу сделать так чтоб она вызывалась иконкой но ничего не происходит - вот взгляните!
Код

int WINAPI WinMain(HINSTANCE hPervInst,HINSTANCE hPredidInst,
                   PSTR czCmdLine,int iCmdShow)
{
HWND hwnd;
MSG msg;
WNDCLASSEX wndclass;
wndclass.cbClsExtra=0;
wndclass.cbSize=sizeof(wndclass);
wndclass.cbWndExtra=0;
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hCursor=LoadCursor(NULL,IDI_APPLICATION);
//---------------------------------------------------
wndclass.hIcon=LoadIcon(0,"we.bmp");
wndclass.hIconSm=LoadIcon(0,"we.bmp");
//---------------------------------------------------
wndclass.hInstance=hPervInst;
wndclass.lpszMenuName=NULL;
wndclass.lpfnWndProc=WndProc;
wndclass.lpszClassName="Priv";
wndclass.style=CS_HREDRAW|CS_VREDRAW;
RegisterClassEx(&wndclass);


название we.bmp!
Спасибо


--------------------
Мой сайт на django
Japanese Innovations
PM ICQ   Вверх
Snowy
Дата 5.9.2006, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Как интересно.
А что, уже появились иконки с расширением bmp?
И вообще правильно. Зачем передавть в LoadIcon hInstance? Ноль и всё...
Пусть винда сама гадает, что от неё хотели...

Добавлено @ 21:14 
ЗЫ. Зачем ресурсу расширение?
Расширение должно быть у файла. Сомневаюсь, что стандартный редактор ресурсов вздумает пришлёпывать расширение ресурсу...
PM MAIL   Вверх
HellanD
Дата 5.9.2006, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Да это был крик души ну вот есть несколько вариантов:
Код

int WINAPI WinMain(HINSTANCE hPervInst,HINSTANCE hPredidInst,
                   PSTR czCmdLine,int iCmdShow)
{
HWND hwnd;
MSG msg;
WNDCLASSEX wndclass;
wndclass.cbClsExtra=0;
wndclass.cbSize=sizeof(wndclass);
wndclass.cbWndExtra=0;
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hCursor=LoadCursor(NULL,IDI_APPLICATION);
wndclass.hIcon=LoadIcon(hPervInst,IDI_ICON1);
wndclass.hIconSm=LoadIcon(hPervInst,IDI_ICON1);

Он пишет что не знает вааще IDI_ICON1 хотя я его создал....
Не будьте так строги я не волшебник я только УЧУСЬ!!!!!


--------------------
Мой сайт на django
Japanese Innovations
PM ICQ   Вверх
bugmenot
Дата 5.9.2006, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



HellanD

Код
#include "resource.h"

Ставил?
--------------------
доска объявленийвсе о горных велосипедах 
PM MAIL   Вверх
HellanD
Дата 5.9.2006, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я не ставил....
Щас попробовал посмотри плиз мне компилятор провел

Compiling...
StartButton.cpp
c:\documents and settings\oleg\мои документы\visual studio 2005\projects\startbutton\startbutton\startbutton.cpp(16) : error C2664: 'LoadIconA' : cannot convert parameter 2 from 'int' to 'LPCSTR'
        Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
c:\documents and settings\oleg\мои документы\visual studio 2005\projects\startbutton\startbutton\startbutton.cpp(17) : error C2664: 'LoadIconA' : cannot convert parameter 2 from 'int' to 'LPCSTR'
        Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
c:\documents and settings\oleg\мои документы\visual studio 2005\projects\startbutton\startbutton\startbutton.cpp(36) : warning C4244: 'return' : conversion from 'WPARAM' to 'int', possible loss of data
Build log was saved at "file://c:\Documents and Settings\Oleg\Мои документы\Visual Studio 2005\Projects\StartButton\StartButton\Debug\BuildLog.htm"
StartButton - 2 error(s), 1 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Добавлено @ 21:24 
Вот полный код...
Код

# include <windows.h>
#include "resource.h"
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

int WINAPI WinMain(HINSTANCE hPervInst,HINSTANCE hPredidInst,
                   PSTR czCmdLine,int iCmdShow)
{
HWND hwnd;
MSG msg;
WNDCLASSEX wndclass;
wndclass.cbClsExtra=0;
wndclass.cbSize=sizeof(wndclass);
wndclass.cbWndExtra=0;
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hCursor=LoadCursor(NULL,IDI_APPLICATION);
wndclass.hIcon=LoadIcon(hPervInst,IDI_ICON1);
wndclass.hIconSm=LoadIcon(hPervInst,IDI_ICON1);
wndclass.hInstance=hPervInst;
wndclass.lpszMenuName=NULL;
wndclass.lpfnWndProc=WndProc;
wndclass.lpszClassName="Priv";
wndclass.style=CS_HREDRAW|CS_VREDRAW;
RegisterClassEx(&wndclass);

hwnd=CreateWindow("Priv","HI",WS_OVERLAPPEDWINDOW,
                  CW_USEDEFAULT,CW_USEDEFAULT,
                  CW_USEDEFAULT,CW_USEDEFAULT,
                  NULL,NULL,hPervInst,NULL);

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){
static int Lengh,Width,i=2;
HWND hwndC;
HDC hdc;
PAINTSTRUCT ps;
HBRUSH hBr;
switch(iMsg){
    case WM_CREATE:
        return 0;
    case WM_SIZE:
        Lengh=HIWORD(lParam);
        Width=LOWORD(lParam);
        return 0;
    case WM_PAINT:
        hdc=BeginPaint(hwnd,&ps);
        
        EndPaint(hwnd,&ps);
        return 0;
    case WM_DESTROY:
        PostQuitMessage(0);
        
        return 0;
}
return DefWindowProc(hwnd,iMsg,wParam,lParam);
}


И ресур название имеет icon1.ico а в части ресурсов IDI_ICON1



--------------------
Мой сайт на django
Japanese Innovations
PM ICQ   Вверх
bugmenot
Дата 5.9.2006, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Поменяй
Код
wndclass.hIcon=LoadIcon(hPervInst,IDI_ICON1);
wndclass.hIconSm=LoadIcon(hPervInst,IDI_ICON1);

C
Код
wndclass.hIcon=LoadIcon(hPervInst, MAKEINTRESOURCE(IDI_ICON1));
wndclass.hIconSm=LoadIcon(hPervInst, MAKEINTRESOURCE(IDI_ICON1));

Или
Код
wndclass.hIcon=LoadIcon(hPervInst, (LPCSTR)IDI_ICON1);
wndclass.hIconSm=LoadIcon(hPervInst, (LPCSTR)IDI_ICON1);

--------------------
доска объявленийвсе о горных велосипедах 
PM MAIL   Вверх
Snowy
Дата 5.9.2006, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Код

wndclass.hIcon = LoadIcon(GetModuleHandle(NULL), "MYICON");

При этом иконка должна иметь формат ico. В процедуру нужно передать имя ресурса. В примере его зовут "MYICON".
GetModuleHandle можно заменить на hInstance своей программы или файла с ресурсом, если он известен.

Добавлено @ 21:28 
Если возвращает ощибку, то прочитай GetLastError - там сказано, почему не грузицца.
PM MAIL   Вверх
HellanD
Дата 5.9.2006, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спасибо код работает!
Скажите а что за промежуточная функция такая MAKEINTRESOURCE(IDI_ICON1)

И еще 
Код

wndclass.hIcon = LoadIcon(GetModuleHandle(NULL), "MYICON");

Это значит что если у меня иконка в файле icon1.ico я могу написать
wndclass.hIcon = LoadIcon(GetModuleHandle(NULL), "icon1");
Но так не работает!!!!!!!!


--------------------
Мой сайт на django
Japanese Innovations
PM ICQ   Вверх
bugmenot
Дата 5.9.2006, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(HellanD @  5.9.2006,  21:32 Найти цитируемый пост)
что за промежуточная функция

Это макро

Обозначено как:
Код
#define MAKEINTRESOURCE(i)  (LPTSTR) ((DWORD) ((WORD) (i)))


Цитата(HellanD @  5.9.2006,  21:32 Найти цитируемый пост)
Это значит что если у меня иконка в файле icon1.ico я могу написать

Нет =)
--------------------
доска объявленийвсе о горных велосипедах 
PM MAIL   Вверх
Snowy
Дата 5.9.2006, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



MAKEINTRESOURCE - указывает тип ресурса, который ты собираешься грузить.
Также необходимо знать язык ресурса и его имя, чтобы загрузить.
Знание имени файла совершенно недостаточно.
Если ты создавал ресурсы, то все эти параметры нужно знать.
Язык лучше устанавливать на нейтральный - 0. Тип иконка. Имя - зависит только от тебя.

Цитата(HellanD @  5.9.2006,  21:32 Найти цитируемый пост)
wndclass.hIcon = LoadIcon(GetModuleHandle(NULL), "icon1");
А не факт, что она именно так называется.
Как назвал, так и грузи...
ЗЫ. Ресурсы именуются заглавными буквами.
PM MAIL   Вверх
HellanD
Дата 5.9.2006, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Еще раз вам спасибо!!!


--------------------
Мой сайт на django
Japanese Innovations
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0528 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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