加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

为什么我的编辑控件在我的win32 c应用程序中看起来很奇怪而不使

发布时间:2020-12-14 02:55:54 所属栏目:Windows 来源:网络整理
导读:我有这个程序,我创建了一个窗口,在里面,我添加了一个使用普通C(没有MFC或对话框)的编辑控件,编辑控件创建代码是 hWnd=::CreateWindowExA(NULL,//no extended style "EDIT",NULL,//no title WS_CHILD|WS_VISIBLE|WS_BORDER,x,y,Width,Height,hWndParent,(HMEN
我有这个程序,我创建了一个窗口,在里面,我添加了一个使用普通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);

但渲染的控件看起来很难看……

这就是我希望我的控件看起来像……

我尝试调用InitCommonControlsEx并包含comctl32.lib但没有任何改变.
我想添加一个描述所有依赖项的应用程序清单文件可以解决问题,但我不知道如何使用Visual Studio 1010 IDE(我自己无法编辑清单文件)

是否可以使用c / c(没有MFC或.NET之类的东西)来获得正常的vista样式控件.如果添加清单资源可以解决问题,那么我如何编写/生成一个清单文件并将其添加到我的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,100,50,/* set size in WM_SIZE message       */ 
            hWnd,/* parent window                     */ 
            (HMENU) 1,/* edit control ID         */ 
            (HINSTANCE) GetWindowLong(hWnd,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,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,PM_REMOVE) ) 
    {
        if (msg.message == WM_QUIT) 
            break;
        TranslateMessage( &msg );
        DispatchMessage ( &msg );

    } 
}
return msg.wParam;
}

更新:我更新了我的项目以使用unicode charset / libraries,现在视觉样式正在工作,除了编辑控件…看看..

?我使用样式进行编辑控制WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL | ES_NOHIDESEL

解决方法

启用视觉样式: http://msdn.microsoft.com/en-us/library/bb773175.aspx

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读