2012-01-01 25 views
5

मैं इस कार्यक्रम मैं कहाँ एक खिड़की बनाई गई है और वह अंदर मैं सादा सी (कोई 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 शामिल है, लेकिन कुछ भी नहीं बदला।
मैं एक आवेदन प्रकट सभी निर्भरता का वर्णन समस्या को ठीक होगा फ़ाइल जोड़ने लगता है, लेकिन मैं कैसे कि विजुअल स्टूडियो 1010 आईडीई का उपयोग कर

(मैं मालसूची फ़ाइल अपने आप को संपादित नहीं कर सकते) करने के लिए पता नहीं है क्या यह संभव है केवल सी/सी ++ (कोई एमएफसी या .NET जैसे कुछ भी) का उपयोग करके सामान्य विस्टा शैली नियंत्रण प्राप्त करने के लिए। यदि मैनिफेस्ट संसाधन जोड़ना समस्या को ठीक करेगा तो मैं एक मैनिफेस्ट फ़ाइल कैसे लिखूं/उत्पन्न कर सकता हूं और इसे अपने एक्सई में जोड़ सकता हूं?

#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; 
} 

अद्यतन: मैं यूनिकोड चारसेट/पुस्तकालयों और अब दृश्य शैलियों संपादित करें नियंत्रण के लिए छोड़कर काम कर रहे हैं का उपयोग करने के ... एक बार देख ले अपने प्रोजेक्ट अद्यतन ..
enter image description here
मैं संपादन नियंत्रण WS_CHILD के लिए शैलियों का इस्तेमाल किया | WS_VISIBLE | ES_AUTOHSCROLL | ES_NOHIDESEL

+0

ठीक है मैं MSDN साइट में "सक्षम करने से दृश्य शैलियाँ" पढ़ सकते हैं और जोड़ा प्रकट तो जाँच की है कि संसाधन हैकर में ... हर अपेक्षित परिणाम नहीं मिला ठीक चला गया, लेकिन अभी भी। – smit

+0

यह मुझे पागल गाड़ी चला रहा है ... वह कैसे ** इस दुनिया में मैं सरल गैर संवाद आधारित नियंत्रण के लिए दृश्य शैलियों सक्षम कर सकते हैं ??????????????????? की – smit

+1

संभव डुप्लिकेट [सी + विन एपीआई में प्रोग्रामिंग: कैसे नियंत्रण के लिए विंडोज 7 से देखने के लिए] (http://stackoverflow.com/questions/5663091/programming-in-c-win-api-how-to-get -windows-7-रंग-रूप के लिए नियंत्रण)। मेरा जवाब लिंकर को आपके लिए ऐसा करने के द्वारा आपके एप्लिकेशन में एक मैनिफेस्ट एम्बेड करने का एक आसान तरीका प्रदान करता है। कोई संसाधन संपादक की आवश्यकता नहीं है। –

उत्तर

4

यह था एक लंबे समय के बाद से मैं Win32 जीयूआई सामान कर रहा था लेकिन जैसा कि मैंने यह याद है कि आप (कम से कम धँसा 3 डी प्रभाव, यकीन नहीं एक विस्तारित शैली के रूप में WS_EX_CLIENTEDGE का उपयोग करना चाहिए और न शून्य क्या आप "एनिमेटेड सीमा" के साथ मतलब है)।

+0

मैंने यह भी कोशिश की लेकिन मुझे एक सनकी किनारा मिला जो पीले रंग की पृष्ठभूमि के साथ और अधिक उलझन में दिखता है, इस शैली को हटाने के लिए मुझे काला सीमा के साथ एक फ्लैट संपादन बॉक्स मिला .... अपेक्षाकृत बेहतर। – smit

+0

ओह हाँ, पीले रंग की पृष्ठभूमि पर यह डिफ़ॉल्ट रूप से काफी बदसूरत लगेगा: -) मुझे लगता है कि पृष्ठभूमि की पसंद फ्लैट लुक को हाइलाइट करना था। – Fredrik

+0

एनिमेटेड सीमा से मेरा मतलब है विंडोज़ विस्टा + – smit

7

को सक्षम करने से दृश्य शैलियाँ: http://msdn.microsoft.com/en-us/library/bb773175.aspx

+0

मेनिफेस्ट एम्बेड करना संवाद आधारित अनुप्रयोगों के लिए काम करता है लेकिन मेरे सरल Win32 एप्लिकेशन के लिए कोई बदलाव नहीं है। – smit

+0

मैं गलत था ... मैनिफेस्ट सही ढंग से काम करता था, लेकिन मुझे नहीं पता कि विशेष संपादन नियंत्रण में क्या गड़बड़ है, आज मैंने एक बटन प्रदर्शित करने की कोशिश की तो मुझे पता था कि समस्या अभिव्यक्ति के साथ नहीं है लेकिन कुछ और है। – smit