tôi có chương trình này mà tôi đã tạo ra một cửa sổ và bên trong mà tôi thêm một điều khiển chỉnh sửa sử dụng đồng bằng C (không MFC hoặc hộp thoại), mã tạo chỉnh sửa điều khiển là nhưTại sao điều khiển chỉnh sửa của tôi trông lạ trong ứng dụng win32 C++ của tôi bằng cách sử dụng MFC không?
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);
Nhưng sự kiểm soát render trông xấu xí. ..
Và đây là những gì tôi muốn điều khiển của tôi trông giống như ...
Tôi đã thử gọi số InitCommonControlsEx
và bao gồm comctl32.lib
nhưng không có gì thay đổi.
Tôi nghĩ rằng việc thêm tệp kê khai ứng dụng mô tả tất cả các phụ thuộc sẽ khắc phục sự cố nhưng tôi không biết cách thực hiện điều đó bằng cách sử dụng Visual Studio 1010 IDE (Tôi không thể chỉnh sửa tệp kê khai)
Có thể để có được các điều khiển kiểu vista bình thường chỉ sử dụng c/C++ (không có MFC hoặc bất kỳ thứ gì như .NET). Nếu việc thêm tài nguyên tệp kê khai sẽ khắc phục sự cố thì làm cách nào tôi có thể viết/tạo một tệp kê khai và thêm nó vào exe của tôi?
#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: Tôi cập nhật dự án của tôi để sử dụng unicode charset/thư viện và bây giờ phong cách trực quan đang làm việc trừ những chỉnh sửa điều khiển ... hãy xem ..
tôi đã sử dụng phong cách cho chỉnh sửa kiểm soát WS_CHILD WS_VISIBLE | ES_AUTOHSCROLL | ES_NOHIDESEL
Ok tôi đọc "Bật Styles Visual" trong trang web MSDN và thêm các biểu hiện sau đó kiểm tra rằng trong các hacker tài nguyên ... mỗi diễn ra tốt đẹp nhưng vẫn không có được kết quả mong đợi. – smit
Điều này khiến tôi phát điên ... làm thế nào anh ta ** trong thế giới này tôi có thể kích hoạt kiểu trực quan cho các điều khiển dựa trên hộp thoại không đơn giản ???????????????????? – smit
có thể trùng lặp của [Lập trình trong C + Win API: Làm thế nào để có được Windows 7 Look For Controls?] (Http://stackoverflow.com/questions/5663091/programming-in-c-win-api-how-to-get -windows-7-look-for-controls). Câu trả lời của tôi có cung cấp một phương thức đơn giản hơn để nhúng một tệp kê khai vào ứng dụng của bạn bằng cách làm cho trình liên kết làm điều đó cho bạn. Không yêu cầu trình chỉnh sửa tài nguyên. –