私は、ウィンドウを作成し、その内側に、私は、プレーン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);
ようです。しかし、レンダリング制御が醜いです。 ..
そして、ここで私は私のコントロールが見えるようにしたいものだ...
私は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:私はユニコード文字セット/ライブラリを使用するために私のプロジェクトを更新し、現在のビジュアルスタイルがエディットコントロールを除いて作業している...見てみましょう。..
私はエディットコントロールWS_CHILDのスタイルを使用| WS_VISIBLE | ES_AUTOHSCROLL | ES_NOHIDESEL
[OK]を私は、MSDNサイトの「視覚スタイルを有効にする」を読み、マニフェストは、リソースハッカーに...すべての罰金行ってきましたが、まだ期待される結果を取得していないことを確認しました。 – smit
これは私を夢中にしています...彼はこの世界でどのように私は簡単な非ダイアログベースのコントロールのためのビジュアルスタイルを可能にすることができますか?????????????????? – smit
[C + Win APIのプログラミング:Windows 7のコントロールを探す方法](http://stackoverflow.com/questions/5663091/programming-in-c-win-api-how-to-get -windows-7-look-for-controls)を使用します。私の答えは、あなたのアプリケーションにマニフェストを埋め込むための簡単な方法を提供します。リソースエディタは必要ありません。 –