Region Bitmap

Résolu
DarkBoss Messages postés 154 Date d'inscription samedi 3 août 2002 Statut Membre Dernière intervention 12 décembre 2008 - 16 janv. 2005 à 15:24
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 - 16 janv. 2005 à 17:23
Salut,
Voilà, je désirerais créer une application skinnable, mais le probleme c' est que je n' utilise pas ces *** de dialogbox, je fais tout en code et sans class.
Toute la doc que j' ai trouver là dessus était faite a partir d' applications ayant des dialog box comme fenetre.
Merci d' avance

Tchuss

DarkBoss

3 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
16 janv. 2005 à 16:56
Et quel est ton problème au juste ?



Si tu crée une fenêtre, avec MFC ou non, tu peut récupèrer son handle de fenêtre.



Une fois ta région crée, tu peux l'appliquer à ta fenêtre grâce à ce handle.


DarK Sidious

[Administrateur et responsable VB/API du site ProgOtoP]
3
DarkBoss Messages postés 154 Date d'inscription samedi 3 août 2002 Statut Membre Dernière intervention 12 décembre 2008
16 janv. 2005 à 17:18
merci Darksidious de ta reponse, j' ai trouver comment faire mais en fait ce que je voulais dire c' est:
que il n' y a que des exemples avec mfc, et cela est très déroutant, car je n' ai pas l' habitude de travailler "graphiquement"!

je poste la source que j' ai fait grace a la fonction d' anthraxx(http://www.cppfrance.com/code.aspx?ID=10721)
le fichier bmptorgn contient la fonction d' anthraxx
et resource.h contien #define ID_BUTTON 100
il faut créer un fichier c:\skin.bmp pour le skin la couleur transparente est le noir,

#include "resource.h"
#include <math.h>
#include "bmpTOrgn.cpp"



HBRUSH hbr;
char szappname[] = "Rondeur";


LRESULT CALLBACK AppWndProc(HWND hwnd, UINT mssg, WPARAM wParam, LPARAM lParam)
{
static HBITMAP hBitmap ;
HINSTANCE hInstance ;
HDC hDC;
HDC hdcMem ;
PAINTSTRUCT paintst;


switch(mssg) {
case WM_CREATE:


hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;
hBitmap = (HBITMAP)LoadImage(hInstance,"c:\\skin.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_DEFAULTSIZE);
if (!hBitmap)MessageBox (NULL, "Erreur", "erreur", MB_OK);
SetWindowRgn(hwnd,BmpToRgn(hBitmap, 0), FALSE);
return 0 ;
case WM_PAINT:
hDC=BeginPaint(hwnd,&paintst);
if (!hBitmap) {
MessageBox (NULL, "Erreur 2: Impossible de redessiner la fenetre", "erreur", MB_OK);
}
else {
hdcMem = CreateCompatibleDC(hDC);
SelectObject (hdcMem, hBitmap) ;
BitBlt (hDC, 0, 0, 800, 600, hdcMem, 0, 0, SRCCOPY) ;
DeleteDC (hdcMem) ;
}
EndPaint(hwnd,&paintst);
return 0;
case WM_KILLFOCUS:
return 0;
case WM_KEYDOWN:
if(wParam == VK_ESCAPE) PostMessage(hwnd, WM_CLOSE, 0, 0l);
break;
case WM_DESTROY:
PostQuitMessage(0);
}
return DefWindowProc(hwnd, mssg, wParam, lParam);
}


int WINAPI InitInstance(HINSTANCE hinst)
{
HBITMAP hBitmap;
//GetStockObject(NULL_BRUSH) pour background.
WNDCLASS wndclass;
hbr = (HBRUSH) GetStockObject (NULL_BRUSH);
memset(&wndclass, 0, sizeof(WNDCLASS));
wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
wndclass.lpfnWndProc = AppWndProc;
wndclass.hInstance = hinst;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);
wndclass.hbrBackground = hbr;
wndclass.lpszClassName = szappname;
return RegisterClass(&wndclass);
}


int WINAPI WinMain(HINSTANCE hinst, HINSTANCE, PSTR, int)
{
MSG msg;
if(!InitInstance(hinst)) return 0;


HWND hwnd = CreateWindow(szappname, 0,
WS_POPUP | WS_VISIBLE | WS_CLIPSIBLINGS,
0, 0, 800, 600, 0, 0, hinst, 0);
HWND cmdhWnd = CreateWindowEx(0, "BUTTON", "", /*WS_VISIBLE*/|WS_CHILD|BS_PUSHBUTTON|BS_NOTIFY|BS_TEXT,508, 48, 27, 21, hwnd, (HMENU)ID_BUTTON, hinst, NULL);// pour cliquer sur la croix et que ca ferme
if(!hwnd) return 0;
ShowWindow(hwnd, SW_SHOW);
UpdateWindow(hwnd);
SetWindowText(cmdhWnd, "x");
// Met à jour le bouton
UpdateWindow(cmdhWnd);
// Donne le focus au bouton
//SetFocus(cmdhWnd);
while(GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}

DarkBoss
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
16 janv. 2005 à 17:23
Ben disont que les MFC permettent de développer plus rapidement, et
évite de devoir taper beaucoup de code pour faire une application
windows "classique". Ca mâche beaucoup le travail, bien que cela crée
des dépendances, et ralentisse le code (perso, je programme sous VB, et
un code VB optimisé est quasiment aussi rapide lorsqu'il est compilé
qu'une application faite en C++). Pourquoi perdre autant de temps pour
ne gagner au final que quelques ms sur certains traîtements. C'est pour
cette raison que je pense passer à C# plutôt que de persevérer en C++ !

DarK Sidious

[Administrateur et responsable VB/API du site ProgOtoP]
0
Rejoignez-nous