Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[WinAPI] Zmiana ikony w programie

Ostatnio zmodyfikowano 2013-02-03 13:21
Autor Wiadomość
Madejsan
Temat założony przez niniejszego użytkownika
[WinAPI] Zmiana ikony w programie
» 2013-01-27 14:39:58
Witam.

Piszę programik w CB i chciałem zmienić ikony na własne. Niestety nie wiem czemu nie chcą się wczytać. Robiłem wszystko według kursu i sporo szukałem w necie. Programem ResEdit utworzyłem plik ikona.rc i resource.h

ikona.rc wyglada tak:
C/C++
#include <windows.h>
#include <commctrl.h>
#include <richedit.h>
#include "resource.h"

IDI_CURSOR1 CURSOR "aero.cur"
IDI_ICON1 ICON "ikona.ico"
IDI_ICON2 ICON "ikonasm.ico"

jedna ikona jest 16x16 druga 32x32. Oczywiscie wszysekie pliki są w katalogu z projektem.

w resource.h mam:
C/C++
#ifndef IDC_STATIC
#define IDC_STATIC (-1)
#endif
#define IDI_ICON1 100
#define IDI_ICON2 101
#define IDI_CURSOR1 102

w main.cpp dodałem:
#include "resource.h"

i zmieniłem:
C/C++
wincl.hIcon = LoadIcon( hThisInstance, MAKEINTRESOURCE( IDI_ICON1 ) );
wincl.hIconSm = LoadIcon( hThisInstance, MAKEINTRESOURCE( IDI_ICON2 ) );
wincl.hCursor = LoadCursor( hThisInstance, MAKEINTRESOURCE( IDI_CURSOR1 ) );

Klikajac na projekt dodałem do katalogu Headers plik resource.h jednak jest on "szary" wyglada tak jakby był nieaktywny.

Z góry wielkie dzięki za podpowiedzi.
P-75151
DejaVu
» 2013-01-27 16:53:27
Frazy, które należy wpisać w wyszukiwarkę google:
P-75159
Madejsan
Temat założony przez niniejszego użytkownika
» 2013-01-27 22:26:09
Szukałem już na dużej ilości stron i robiłem według podanych tam różnych sposobów jednak nadal ikona nie chce się załadować. Teoretycznie wszystko jest poprawnie ale praktycznie jak się okazuje nie. Nie rozumiem dlaczego plik resource.h w projekcie jest "podświetlony" na szaro. Jeżeli wejde na nim w Properties->Build i zaznacze Compile File i Link File zmienia się na czarny ale wtedy program sie wywala.
P-75181
Gabes
» 2013-01-27 23:14:06
A czy dodałeś do projektu plik ikona.rc ?
P-75186
Madejsan
Temat założony przez niniejszego użytkownika
» 2013-01-28 17:31:40
Tak plik ikona.rc normalnie dodana do projektu w folderze Resousces. Mam tez dodane menu.rc i normalnie śmiga. Jest możliwe że to wina jakiejś biblioteki? Może coś nie jest podlinkowane?
P-75242
Madejsan
Temat założony przez niniejszego użytkownika
» 2013-01-28 18:54:36
Wydaje mi się że to chyba wina hThisInstance podkleje początek kodu:

C/C++
#include <windows.h>
#define _WIN32_IE 0x0400
#include <iostream>
#include <commdlg.h>
#include <stdio.h>
#include <math.h>
#include <cv.h>
#include <highgui.h>
#include <stdlib.h>
#include <commctrl.h>
#include <richedit.h>
#include "resource.h"
HINSTANCE hThisInstance;
HBITMAP hbmObraz;
HBRUSH hBrush;
HWND hPrzycisk1;
HWND hPrzycisk2;
HWND hPrzycisk3;
HWND hPrzycisk4;
HWND hPrzycisk5;
HWND hPrzycisk6;
HWND hPrzycisk7;
HWND hEdit;
HWND hEdit2;
HWND hEdit3;
HMENU hMenu;
HFONT hFont;
HFONT hFont2;
using namespace std;
using namespace cv;

void CreateToolTipForRect( HWND hwndParent )
{
    INITCOMMONCONTROLSEX ic;
    ic.dwSize = sizeof( INITCOMMONCONTROLSEX );
    ic.dwICC = ICC_TAB_CLASSES;
    InitCommonControlsEx( & ic );
    // Create a ToolTip.
    HWND hwndTT = CreateWindowEx( WS_EX_TOPMOST, TOOLTIPS_CLASS, NULL, WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP, CW_USEDEFAULT, CW_USEDEFAULT,
    CW_USEDEFAULT, CW_USEDEFAULT, hwndParent, NULL, hThisInstance, NULL );
    SetWindowPos( hwndTT, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE );
   
    TOOLINFO ti = { 0 };
    ti.cbSize = sizeof( TOOLINFO );
    ti.uFlags = TTF_SUBCLASS;
    ti.hwnd = hwndParent;
    ti.hinst = hThisInstance;
    ti.lpszText = LPSTR_TEXTCALLBACK;
    GetClientRect( hwndParent, & ti.rect );
   
    SendMessage( hwndTT, TTM_SETTITLEA, 1,( LPARAM ) "Informacje" );
    SendMessage( hwndTT, TTM_ADDTOOL, 0,( LPARAM )( LPTOOLINFO ) & ti );
    SendMessage( hwndTT, TTM_ACTIVATE, true, NULL );
   
}

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

/*  Make the class name into a global variable  */
char szClassName[] = "CodeBlocksWindowsApp";
int WINAPI WinMain( HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nCmdShow )


{
    HWND hwnd; /* This is the handle for our window */
    MSG messages; /* Here messages to the application are saved */
    WNDCLASSEX wincl; /* Data structure for the windowclass */
   
    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure; /* This function is called by windows */
    wincl.style = CS_DBLCLKS; /* Catch double-clicks */
    wincl.cbSize = sizeof( WNDCLASSEX );
    wincl.hIcon = LoadIcon( hThisInstance, MAKEINTRESOURCE( IDI_ICON1 ) );
    wincl.hIconSm = LoadIcon( hThisInstance, MAKEINTRESOURCE( IDI_ICON2 ) );
    wincl.hCursor = LoadCursor( hThisInstance, MAKEINTRESOURCE( IDI_CURSOR1 ) );
    wincl.lpszMenuName = NULL; /* No menu */
    wincl.cbClsExtra = 0; /* No extra bytes after the window class */
    wincl.cbWndExtra = 0; /* structure or the window instance */
    hbmObraz =( HBITMAP ) LoadImage( NULL, "tlo.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION );
    hBrush = CreatePatternBrush( hbmObraz );
    wincl.hbrBackground = hBrush;
   
    if( !RegisterClassEx( & wincl ) )
         return 0;
   
P-75246
Madejsan
Temat założony przez niniejszego użytkownika
» 2013-02-02 15:48:33
Zacząłem bawić się z bibliotekami i teraz jak kompiluje program wywala błąd "preprocessing failed" :/ czym to może być spowodowane?
P-75599
Madejsan
Temat założony przez niniejszego użytkownika
» 2013-02-02 16:35:14
Ok. Naprawiłem :)

Odnośnie zmiany ikony to zauważyłem że jak usunę z projektu plik menu.rc, zrobię rebuild i skompiluje to wszystko ładnie się wczytuje. Chciałbym jednak zachować menu w górnym pasku. Ma ktoś jakiś pomysł czemu to się "gryzie"?

P-75601
« 1 » 2
  Strona 1 z 2 Następna strona