tengo este programa que le crea una ventana y en su interior que he añadido un control de edición utilizando C plano (sin MFC o diálogos), el código de creación de control de edición es tan¿Por qué mi control de edición parece extraño en mi aplicación win32 C++ sin 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);
Pero el control prestados se ve feo. ..
Y esto es lo que quiero que mis controles para que parezca ...
Intenté llamar al InitCommonControlsEx
e incluí comctl32.lib
, pero no cambió nada.
Creo que la adición de un archivo de manifiesto de aplicación que describe todas las dependencias que solucionar el problema, pero no sé cómo hacer que el uso de Visual Studio 1010 IDE (no puede editar un archivo de manifiesto a mí mismo)
¿Es posible obtener los controles de estilo de vista normales usando solo c/C++ (sin MFC ni nada parecido a .NET). Si agregar recurso manifiesto solucionaría el problema, ¿cómo puedo escribir/generar un archivo de manifiesto y agregarlo a mi 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;
}
ACTUALIZACIÓN: He actualizado mi proyecto para utilizar charset/bibliotecas Unicode y ahora estilos visuales están trabajando a excepción del control de edición ... echar un vistazo ..
que utilizan estilos de WS_CHILD control de edición | WS_VISIBLE | ES_AUTOHSCROLL | ES_NOHIDESEL
Ok leí la "Habilitación de estilos visuales" en MSDN sitio y añaden el manifiesto después se comprueba que en todos los hackers de recursos ... fue bien, pero todavía no consiguió el resultado esperado. – smit
Esto me está volviendo loco ... cómo es que él ** en este mundo puedo habilitar estilos visuales para controles simples que no están basados en diálogos ??????????????????? – smit
posible duplicado de [Programación en C + Win API: ¿Cómo obtener Windows 7 Buscar controles?] (Http://stackoverflow.com/questions/5663091/programming-in-c-win-api-how-to-get -windows-7-busque-por-controles). Mi respuesta allí proporciona un método más sencillo para insertar un manifiesto en su aplicación haciendo que el enlazador lo haga por usted. No se requiere un editor de recursos. –