Ho questo programma in cui ho creato una finestra e dentro che ho aggiunto un controllo di modifica utilizzando la lingua C (senza MFC o le finestre di dialogo), il codice di creazione controllo di modifica è comePerché il mio controllo di modifica sembra strano nella mia applicazione C++ win32 che non usa 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);
ma il controllo reso sembra brutto. ..
Ed ecco quello che voglio i miei controlli a guardare come ...
Ho provato a chiamare InitCommonControlsEx
e incluso comctl32.lib
ma non è cambiato nulla.
Credo che l'aggiunta di un file manifesto dell'applicazione che descrive tutte le dipendenze avrebbe risolto il problema, ma non so come fare utilizzando Visual Studio 1010 IDE (non riesco a modificare un file manifesto sottoscritto)
E 'possibile per ottenere i normali controlli di stile vista usando solo c/C++ (senza MFC o qualcosa di simile a .NET). Se aggiungere risorse manifest risolverà il problema, allora come posso scrivere/generare un file manifest e aggiungerlo al mio 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: ho aggiornato il mio progetto per utilizzare unicode charset/biblioteche e ora stili visivi stanno lavorando tranne che per il controllo di modifica ... date un'occhiata ..
ho usato stili per WS_CHILD controllo di modifica | WS_VISIBLE | ES_AUTOHSCROLL | ES_NOHIDESEL
Ok ho letto la "Abilitazione Stili di visualizzazione" in sito MSDN e ha aggiunto il manifesto poi verificato che nel Resource Hacker ... ogni andato bene, ma ancora non ha ottenuto il risultato atteso. – smit
Questo mi sta facendo impazzire ... come lui ** in questo mondo posso abilitare gli stili visivi per semplici controlli non basati su finestre di dialogo ??????????????????? – smit
possibile duplicato di [Programmazione in C + Win API: Come ottenere Windows 7 Cerca i controlli?] (Http://stackoverflow.com/questions/5663091/programming-in-c-win-api-how-to-get -Windows-7-look-per-controlli). La mia risposta fornisce un metodo più semplice per incorporare un manifest nella tua applicazione facendo in modo che il linker lo faccia per te. Non è richiesto alcun editor di risorse. –