XP kinézet

XP kinézet
2007-06-24T18:22:00+02:00
2007-06-24T22:45:20+02:00
2022-11-05T00:20:34+01:00
dwp
Hali. Nekem van eddig egy ilyen programom. Telljesen lényegtelen hogy mit csinál, a lényeg, hogy eddig van rajta egy Gomb. Azt hogy lehet megcsinálni, hogy az egész ablaknak és azon a gomban is olyan kinézete legyen mint a rendes XP stílusu gomboknak ? Ja a programot DevCPP-vel fordítom.

#include <windows.h>

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

char szClassName[] = "DaniWinClass";

HWND DivXBtn;
HINSTANCE DivXBtnI;

HWND InstMainWin;
HWND InstChildWin;

HWND CustomHandle;

int Screen_Width = GetSystemMetrics(SM_CXSCREEN);
int Screen_Height = GetSystemMetrics(SM_CYSCREEN);

HFONT CourierNew = CreateFont
(
17, /* HEIGHT */
0, /* WIDTH */
0, /* ESCAPEMENT */
0, /* ORIENTATION */
FW_NORMAL, /* WEIGHT */
false, false, false, /* ITALIC, UNDERLINE, STRIKE OUT */
ANSI_CHARSET, /* CHARSET */
OUT_DEFAULT_PRECIS, /* OUTPUT PRECISION */
CLIP_DEFAULT_PRECIS, /* CLIP PRECISION */
DEFAULT_QUALITY, /* QUALITY */
DEFAULT_PITCH | FF_MODERN, /* PITCH AND FAMILY */
"Courier New" /* NAME */
);

BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam)
{
char* Caption = new char[512];
SendMessage(hwnd,WM_GETTEXT,512,(LPARAM) Caption);
if(Caption[0] == ((LPCSTR) lParam)[0]){CustomHandle = hwnd;};
return true;
};

HWND FindChildWindow(HWND Parent, LPCSTR Name)
{
CustomHandle = 0;
EnumChildWindows(Parent, EnumChildProc, (LPARAM) Name);
return CustomHandle;
};

int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil)
{
HWND hwnd;
MSG messages;
WNDCLASSEX DaniClass;

DaniClass.hInstance = hThisInstance;
DaniClass.lpszClassName = szClassName;
DaniClass.lpfnWndProc = WindowProcedure;
DaniClass.style = CS_DBLCLKS;
DaniClass.cbSize = sizeof (WNDCLASSEX);

DaniClass.hIcon = LoadIcon (NULL, IDI_APPLICATION);
DaniClass.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
DaniClass.hCursor = LoadCursor (NULL, IDC_ARROW);
DaniClass.lpszMenuName = NULL;
DaniClass.cbClsExtra = 0;
DaniClass.cbWndExtra = 0;

DaniClass.hbrBackground = (HBRUSH) (COLOR_BTNFACE + 1);

if (!RegisterClassEx(&DaniClass)) return 0;

hwnd = CreateWindowEx(
0, /* Extended possibilites for variation */
"DaniWinClass", /* Classname */
"Dani Automata Telepítései", /* Title Text */
WS_SYSMENU | WS_MINIMIZEBOX,
CW_USEDEFAULT, /* Windows decides the position */
CW_USEDEFAULT, /* where the window ends up on the screen */
952, /* The programs width */
656, /* and height in pixels */
HWND_DESKTOP, /* The window is a child-window to desktop */
NULL, /* No menu */
hThisInstance, /* Program Instance handler */
NULL /* No Window Creation data */
);

ShowWindow(hwnd, SW_SHOW);

while(GetMessage(&messages, NULL, 0, 0))
{
TranslateMessage(&messages);
DispatchMessage(&messages);
};

return messages.wParam;
}

LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_DESTROY:
PostQuitMessage (0);
break;
case WM_CREATE:
SetWindowPos(hwnd,0,(Screen_Width-952)/2,(Screen_Height-656)/2,10,10,SWP_NOSIZE);
DivXBtn = CreateWindow("BUTTON","DivX 5.2",BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD,8,8,185,25,hwnd,(HMENU)NULL,DivXBtnI,NULL);
SendMessage(DivXBtn,WM_SETFONT,(WPARAM) CourierNew,(LPARAM) true);
break;
case WM_COMMAND:

/* DIVX INSTALL */
if(HIWORD(wParam) == BN_CLICKED && (HWND)lParam == DivXBtn)
{
ShellExecute(0, NULL, "DivX52XP2K.exe", NULL, "D:\\Progz\\Automatized Install\\DivX\\", SW_SHOW);
while(!FindWindow("#32770","Language selection")){Sleep(100);};
InstMainWin = FindWindow("#32770","Language selection");
InstChildWin = FindWindowEx(InstMainWin,0,"BUTTON","OK");
SendMessage(InstChildWin,BM_CLICK,0,0);
while(!FindWindow("#32770","DivX 5.2 Setup")){Sleep(100);};
InstMainWin = FindWindow("#32770","DivX 5.2 Setup");
InstChildWin = FindWindowEx(InstMainWin,0,"BUTTON","&Next >");
SendMessage(InstChildWin,BM_CLICK,0,0);
while(!FindChildWindow(InstMainWin,"No thanks, just giveme DivX")){Sleep(100);};
InstChildWin = FindChildWindow(InstMainWin,"No thanks, just giveme DivX");
SendMessage(InstChildWin,BM_CLICK,0,0);
};
/* DIVX INSTALL END */
break;
default:
return DefWindowProc(hwnd, message, wParam, lParam);
}
return 0;
}
Mutasd a teljes hozzászólást!
Ha jól tudom, a 4.9.7.0 verziótól kezdve van egy olyan lehetőség, hogy a manifest fájlt belerakja az exébe.
Project menü -> Project options, és első fülön, ahol kiválasztod az alkalmazás típusát, azalatt van egy checkbox, hogy "Support Windows XP themes", azt jelöld be és nézd meg, hogy megy-e!
Mutasd a teljes hozzászólást!

Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd