2012-01-01 8 views
5

私は、ウィンドウを作成し、その内側に、私は、プレーンC(なしMFCまたはダイアログ)を使用して、エディットコントロールを追加し、このプログラムを持って、エディットコントロールを作成するコードはMFCを使用しないWin32のC++アプリケーションでエディットコントロールが奇妙に見えるのはなぜですか?

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); 

ようです。しかし、レンダリング制御が醜いです。 ..

enter image description here


そして、ここで私は私のコントロールが見えるようにしたいものだ...

Cool vista themed edit control

私はInitCommonControlsExを呼び出して、comctl32.libを含めてみましたが、何も変わりませんでした。
すべての依存関係を記述したアプリケーションマニフェストファイルを追加すると問題は解決しますが、Visual Studio 1010 IDEを使用してマニフェストファイルを編集する方法はわかりません。

可能ですか単にc/C++(MFCなし、.NETなど)を使用して、通常のVistaスタイルのコントロールを取得します。マニフェストリソースを追加すると問題が解決したら、どのようにして1つのマニフェストファイルを作成/生成し、それを私の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:私はユニコード文字セット/ライブラリを使用するために私のプロジェクトを更新し、現在のビジュアルスタイルがエディットコントロールを除いて作業している...見てみましょう。..
enter image description here
私はエディットコントロールWS_CHILDのスタイルを使用| WS_VISIBLE | ES_AUTOHSCROLL | ES_NOHIDESEL

+0

[OK]を私は、MSDNサイトの「視覚スタイルを有効にする」を読み、マニフェストは、リソースハッカーに...すべての罰金行ってきましたが、まだ期待される結果を取得していないことを確認しました。 – smit

+0

これは私を夢中にしています...彼はこの世界でどのように私は簡単な非ダイアログベースのコントロールのためのビジュアルスタイルを可能にすることができますか?????????????????? – smit

+1

[C + Win APIのプログラミング:Windows 7のコントロールを探す方法](http://stackoverflow.com/questions/5663091/programming-in-c-win-api-how-to-get -windows-7-look-for-controls)を使用します。私の答えは、あなたのアプリケーションにマニフェストを埋め込むための簡単な方法を提供します。リソースエディタは必要ありません。 –

答えて

4

私がWin32のGUIのものをやっていたので、長い時間だったが、私はそれを覚えて、あなたが拡張スタイル(少なくとも沈没3D効果ではなく、必ず何としてWS_EX_CLIENTEDGEはなく、ゼロを使用する必要がありますあなたは "アニメーションボーダー"を意味します)。視覚スタイルを有効にする

+0

私もそれを試しましたが、ちょうど黄色い背景でもっと醜い、沈んだエッジを持って、このスタイルを削除しました。 – smit

+0

ああ、黄色の背景には、デフォルトでかなり醜いように見えます: - )私は、背景の選択がフラットルックを強調することを前提としていました。 – Fredrik

+0

アニメーション境界では、Windows Vistaのホバー効果を意味します+ – smit

7
+0

埋め込みマニフェストはダイアログベースのアプリケーションで動作しましたが、私の単純なwin32アプリケーションでは変更はありませんでした。 – smit

+0

私は間違っていました...マニフェストが正しく動作しましたが、特定のエディットコントロールの何が問題なのか分かりません。今日、ボタンを表示しようとしたときに、問題が症状ではなく他のものであることがわかりました。 – smit

関連する問題