RichEdit lässt sich nicht erstellen :( ...



  • Hi Leutz!
    Sagt mal bitte warum das hier nicht funkt:

    #include <windows.h>
    #include <commctrl.h>
    #include <richedit.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <fstream.h>
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    
    HWND hMain;
    HWND hEdit;
    
    #pragma argsused
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
    {
    	MSG        msg;
    	WNDCLASS   wc;
    
    	const char szAppName[] = "Test";
    
    	wc.style                = CS_HREDRAW | CS_VREDRAW;
    	wc.lpfnWndProc		= WndProc;
    	wc.cbClsExtra		= 0;
    	wc.cbWndExtra		= 0;
    	wc.hInstance		= hInstance;
    	wc.hIcon                = LoadIcon(NULL, IDI_APPLICATION);
    	wc.hCursor              = LoadCursor(NULL, IDC_ARROW);
    	wc.hbrBackground	= (HBRUSH)GetStockObject(LTGRAY_BRUSH);
    	wc.lpszMenuName		= NULL;
    	wc.lpszClassName	= szAppName;
    
    	RegisterClass(&wc);
            InitCommonControls();
            hMain = CreateWindowEx (0, szAppName, "", WS_OVERLAPPEDWINDOW, 0, 0, 600, 500, NULL, NULL, hInstance, NULL);
            if (!LoadLibrary("RICHED32.DLL"))
            {
                    MessageBox(NULL, "nee1", "", 0);
                    return 0;
            }
    
            //All den scheiss hab ich schon ausprobiert:
    
            //hEdit = CreateWindowEx(0, "RICHEDIT", "", WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | ES_AUTOVSCROLL | ES_MULTILINE, 0, 0, 100, 100, hMain, (HMENU)0, hInstance, NULL);
            //hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, RICHEDIT_CLASS, "", WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | ES_AUTOVSCROLL | ES_MULTILINE, 0, 0, 100, 100, hMain, (HMENU)0, hInstance, NULL);
            hEdit = CreateWindowEx(0, RICHEDIT_CLASS, "", WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | ES_AUTOVSCROLL | ES_MULTILINE, 0, 0, 100, 100, hMain, (HMENU)0, hInstance, NULL);
    
            if(hEdit == NULL)
                            MessageBox(NULL, "nee2", "", 0);
    
            /*
            RECT rc;
            GetClientRect(hMain, &rc);
            */
    
            ShowWindow(hMain, iCmdShow);
            UpdateWindow(hMain);
    
           	while(GetMessage(&msg, NULL, 0, 0))
    	{
                    if(!IsDialogMessage(GetForegroundWindow(), &msg))
                    {
                            TranslateMessage(&msg);
                            DispatchMessage(&msg);
                    }
    	}
    
            return 0;
    }
    
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    
       	switch(message)
    	{
                    case WM_CREATE:
    
                            return 0;
            	case WM_SIZE:
                            return 0;
    	        case WM_DESTROY:
    			PostQuitMessage(0);
    			return 0;
                    case WM_COMMAND:
                            return 0;
    	}
    	return DefWindowProc(hWnd, message, wParam, lParam);
    }
    

    Ich habe jetzt echt schon jeden Winkel und jedes WinAPI-Forum durchsucht, überall steht man soll es so machen aber es geht nicht - das blöde RichEdit-Feld wird nicht angezeigt. Aber anscheinen erzeugt, sonst wäre ja hEdit == NULL, isset aber nicht!!!

    😞 😡 😞

    Gruss,
    code_pilot 😡



  • Hört sich ziemlich eigenartig an. Wenn die Handles nicht NULL sind, dann müsste eigentlich alles funktionieren...

    Ich weiß nicht ob's was helfen würde, aber nimm mal diese Message-Loop hier:

    MSG msg;
    
      while( GetMessage(&msg, NULL, 0, 0) )
      {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
      }
    
      return msg.wParam;
    


  • Bei mir läuft es. 🕶



  • Zeig das RichEdit-Control mit ShowWindow() und UpdateWindow() mal an.



  • Er hat schon WS_VISIBLE. Das reicht doch.



  • ...oder GetLastError() fragen



  • muss hmenu nicht ungleich 0 sein ?



  • miller_m schrieb:

    muss hmenu nicht ungleich 0 sein ?

    Nein, ganz bestimmt nicht...



  • Aziz schrieb:

    Nein, ganz bestimmt nicht...

    ich dacht nur da es eine eineindeutige id ist dir das child window indendifiziert.
    war mir nicht so ganz sicher da ich immmer id's vergebe. aber wenn du sagst sein dann ok.



  • Die MSDN sagt dazu

    hMenu

    Handle to a menu, or specifies a child-window identifier depending on the window style. For an overlapped or pop-up window, hMenu identifies the menu to be used with the window; it can be NULL if the class menu is to be used. For a child window, hMenu specifies the child-window identifier, an integer value used by a dialog box control to notify its parent about events. The application determines the child-window identifier; it must be unique for all child windows with the same parent window.

    EDIT: Also Betonung liegt auf dialog box 😉



  • Alle Controls (auch RichEdit) erstelle ich in der WM_CREATE section der WndProc-Funktion. Damit geht es ohne Probleme. Hier so ein Code-Fragment:

    // Specify the window style for the edit control.
    		dwStyle = WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | 
    			WS_BORDER | ES_LEFT | ES_MULTILINE | ES_NOHIDESEL | 
    			ES_AUTOHSCROLL | ES_AUTOVSCROLL;  
    
    		HINSTANCE hlib;
    		hlib = LoadLibrary ("RICHED32.DLL");
    		edbx = CreateWindowEx (WS_EX_STATICEDGE, 
    		                        "RichEdit", 
    		                        "",
    		                        dwStyle,
    		                        0, 0, CW_USEDEFAULT, CW_USEDEFAULT, 
    		                        hwnd, 
    		                        (HMENU)IDC_EDBX, 
    		                        hInstance, 
    		                        NULL);
    		// Schriftart ändern
    		SendMessage (edbx, WM_SETFONT,
    			(WPARAM)GetStockObject (DEFAULT_GUI_FONT), TRUE);
    

    Blackbird



  • Hmm bei läufts jetzt auch aber nur unter Win 98 mit diesem Code:

    hEdit = CreateWindowEx(0, "RICHEDIT", "", WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | ES_AUTOVSCROLL | ES_MULTILINE, 0, 0, 100, 100, hMain, (HMENU)0, hInstance, NULL);
    

    Aber ich habe das andere Programm gestern unter Win NT compiliert und gestartet, resulatat war eben das Fenster OHNE das RichEdit... hmmm komisch ich schau morgen nochmal (bin heute nicht auf der Arbeit) ob's mit euren Tipps geht. Im WM_CREATE hatte ichs auch schon drinne, hat aber auch nix genützt... oder ist auf dem NT-Rechner vielleicht die RichEdit-DLL im A****? Kann ja sein, obwohl andere Programme (z.B. ein Programm von mir das ein TRichEdit vom Borland C++Builder benutzt) ohne Probleme laufen... 🙄

    gruss,
    code_pilot


Anmelden zum Antworten