mam ten program, gdzie stworzyłem okno i wewnątrz, że dodaje się kontrolę edycji przy użyciu zwykłego C (bez MFC lub dialogi), kod tworzenie edycja kontrola jestDlaczego moja kontrola edycji wygląda dziwnie w mojej aplikacji c32 win32 używając MFC?
hWnd=::CreateWindowExA(NULL, //no extended style
"EDIT",
NULL, //no title
WS_CHILD|WS_VISIBLE|WS_BORDER,
x,
y,
Width,
Height,
hWndParent,
(HMENU)id,
(HINSTANCE) GetWindowLong(hWndParent, GWL_HINSTANCE),//the module instance
NULL);
Ale renderowane kontrola wygląda brzydko. ..
A oto co chcę moje kontrole wyglądać ...
Próbowałem wywoływać InitCommonControlsEx
i zawierałem comctl32.lib
, ale nic się nie zmieniło.
Myślę, że dodanie pliku manifestu aplikacji opisującego wszystkie zależności rozwiązałoby problem, ale nie wiem, jak to zrobić, używając Visual Studio 1010 IDE (nie mogę sam edytować pliku manifestu)
Czy to możliwe? aby uzyskać normalne sterowanie stylem vista za pomocą tylko c/C++ (bez MFC lub podobnego do .NET). Jeśli dodanie manifestu zasobów rozwiązałoby problem, to jak mogę zapisać/wygenerować jeden plik manifestu i dodać go do mojego exe?
#include<Windows.h>
#include <commctrl.h >
#pragma comment(linker,"\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#pragma comment(lib,"comctl32.lib")
HWND hwndEdit;
LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wp,LPARAM lp)
{
switch(uMsg)
{
case WM_CREATE:
hwndEdit = CreateWindow(
"EDIT", /* predefined class */
NULL, /* no window title */
WS_CHILD | WS_VISIBLE |
ES_LEFT | ES_AUTOHSCROLL|WS_BORDER,
0, 0, 100, 50, /* set size in WM_SIZE message */
hWnd, /* parent window */
(HMENU) 1, /* edit control ID */
(HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),
NULL); /* pointer not needed */
return 0;
break;
case WM_CLOSE:
::PostQuitMessage(0);//quit application
break;
default:
return ::DefWindowProcA(hWnd,uMsg,wp,lp);
}
return 0l;
}
int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE hPrevinstance,char *cmd,int show)
{
INITCOMMONCONTROLSEX icc;
icc.dwICC=ICC_ANIMATE_CLASS|ICC_NATIVEFNTCTL_CLASS|ICC_STANDARD_CLASSES;
icc.dwSize=sizeof(icc);
InitCommonControlsEx(&icc);
char* tst="Simple edit control";
WNDCLASSEX mywindow;
MSG msg;
HWND hwnd;
mywindow.cbClsExtra=0;
mywindow.cbWndExtra=0;
mywindow.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
mywindow.hCursor=LoadCursor(NULL,IDC_CROSS);
mywindow.hIcon=LoadIcon(NULL,IDI_APPLICATION);
mywindow.hInstance=hinstance;
mywindow.lpfnWndProc=WndProc;
mywindow.lpszClassName="Test";
mywindow.lpszMenuName=NULL;
mywindow.style=0;
mywindow.cbSize=sizeof(WNDCLASSEX);
mywindow.hIconSm=NULL;
if(!RegisterClassEx(&mywindow))
MessageBox(NULL,"Window Registration failed","Error occured",NULL);
hwnd=CreateWindowEx(WS_EX_TOPMOST,"Test","My window",WS_OVERLAPPEDWINDOW,900,300,400,350,NULL,NULL,hinstance,tst);
if(hwnd==NULL)
MessageBox(NULL,"Window creation failed","error",NULL);
::ShowWindow(hwnd,SW_SHOW);
::UpdateWindow(hwnd);
while (1) //NOTE: Game engine type message loop
{ Sleep(1);
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_QUIT)
break;
TranslateMessage(&msg);
DispatchMessage (&msg);
}
}
return msg.wParam;
}
UPDATE: I uaktualniony mój projekt używać unicode charset/biblioteki i teraz style wizualne pracują poza kontrolą edycji ... spojrzeć ..
użyłem style edit sterowania WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL | ES_NOHIDESEL
Ok czytałem „Włączanie style wizualne” w witrynie MSDN i dodaje manifest następnie sprawdził, że w Resource Hacker ... każdy poszedł w porządku, ale nadal nie dostać oczekiwanego rezultatu. – smit
To doprowadza mnie do szału ... jak on ** w tym świecie mogę włączyć style wizualne dla prostych kontrolek nie opartych na dialogu dialogowym ?????????????? – smit
możliwy duplikat funkcji [Programowanie w C + Win API: jak uzyskać Windows 7 w poszukiwaniu kontrolek?] (Http://stackoverflow.com/questions/5663091/programming-in-c-win-api-how-to-get -windows-7-look-for-controls). Moja tam odpowiedź zapewnia prostszą metodę osadzania manifestu w twojej aplikacji, poprzez linker, aby zrobił to za ciebie. Nie jest wymagany edytor zasobów. –