Announcement

Collapse
No announcement yet.

AnfängerProbleme

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • AnfängerProbleme

    Hi!<br>
    hab mal wieder ein paar probleme, und w&auml;re für jede Hilfe dankbar!<br>
    <br>
    <br>
    <b>Nr1)</b><br>
    <i>warum geht das nicht?? da kommen dan drei fehler inerhalb von vector.h</i><br>
    <br>
    vector &lt;CProgressCtrl&gt; List;<br>
    CProgressCtrl* pCtrl = new CProgressCtrl();
    <br>
    List.resize(max<font color=green>/*int*/</font>); <font color=green>//fehler eins</font><br>
    [...]<br>
    List.insert(pCtrl); <font color=green>//fehler zwei</font><br>
    <br>
    <br>
    <b>Nr2)</b><br>
    <i>Wiso hat nItem <U>immer</U> den wert -1??<br>
    (Ist in <font color=gray>(AbgeleiteteKlasse von CListCtrl)</font>::OnClick)<br>
    (wenn die func von 'außen'<font color=gray>(=parentWnd)</font> &uuml;berschrieben wird geht alles)</i><br>
    <br>
    LPNMITEMACTIVATE temp = (LPNMITEMACTIVATE) pNMHDR<font color=green>/*parameter no2*/</font>;<br>
    nItem = temp->iItem;<br>
    <br>
    <br>
    <b>Nr3)</b> Nur eine frage<br>
    <i>Wie kann ich aus einer überschreibung von CListCtrl heraus pr&uuml;fen,<br>
    ob in einem erstellten Feld(typ=CEdit, id=EDIT1)die Eingabetaste gedr&uuml;ckt wurde?</i><br>
    <br>
    wer irgendwas weiß: bitte sagen danke!

  • #2
    ok nr2 gl&ouml;st!
    aber die anderen sachen?

    Comment


    • #3
      hi Daniel,<p>
      falls du noch eine loesung zu nr3) suchst...<br>
      man kann einem control einen eigenen callback verpassen.<br>
      wurde die message WM_CHAR empfangen, prueft man ab, ob das eingegebene zeichen,<br>
      das steuerzeichen VK_RETURN war.<br>
      leider weiss ich nicht, wie man das in mfc realisiert.<br>
      wenn dir ein winapi-beispiel hilft, post ich dir das.<p>
      gruss ro

      Comment


      • #4
        Hi,<br>
        winapi/mfc dürfte in dem fall kein unterschieb machen,<br>wär super wenn du es posten könntest

        Comment


        • #5
          hi Daniel,<p>
          nun gut.<br>
          lege ein neues project an, waehle Win32-Anwendung aus, vergib ein passenden namen (zb: edit_callback).<br>
          zum testen missbrauche ich immer das About-Dialog-Fenster einer "typischen "Hallo Welt!"-Anwendung" in Visual Studio 6.<br>
          nach dem anlegen, geh in den ressourcen-editor und waehle den dialog aus.<br>
          jetz platziere ein edit darauf.<br>
          rechtsklick auf edit -> Eigenschaften -> Formate -> Mehrzeilig aktivieren (leider funktioniert das beispiel nur mit mehrzeiligen edit's).<p>
          ums kurz zu machen, die edit_callback.cpp muss dann so aussehen:<br>
          <pre>
          // edit_callback.cpp : Definiert den Einsprungpunkt für die Anwendung.

          #include "resource.h"
          #include "windows.h"
          //#include "stdafx.h" //wenn vorkompilierte header verwendet werden

          //globale variablen
          HWND hEdit;
          WNDPROC WndProcEdit;

          //prototypes
          LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);
          LRESULT CALLBACK EditWndProc(HWND, UINT, WPARAM, LPARAM);

          //einstiegspunkt der anwendung//////////////////////////////////////////////////
          int APIENTRY WinMain(HINSTANCE hInstance,
          HINSTANCE hPrevInstance,
          LPSTR lpCmdLine,
          int nCmdShow )
          {
          DialogBox(hInstance, (LPCTSTR)IDD_ABOUTBOX, NULL, (DLGPROC)About);

          return 0;
          }

          //nachrichtenschleife des dialogs about////////////////////////////////////
          LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
          {
          switch( message )
          {
          case WM_INITDIALOG:
          //den urspruenglichen WNDPROC pointer sichern und durch den eigenen ersetzen.
          hEdit = GetDlgItem(hDlg, IDC_EDIT1);
          WndProcEdit = (WNDPROC)SetWindowLong(hEdit, GWL_WNDPROC, (LONG)EditWndProc);

          return TRUE;

          case WM_COMMAND:
          if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
          {
          EndDialog(hDlg, LOWORD(wParam));
          return TRUE;
          }
          break;
          }
          return FALSE;
          }

          //eigene nachrichtenschleife des eingabefeldes/////////////////////////////
          LRESULT CALLBACK EditWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
          {
          //da alle versuche scheiterten, eine VK_RETURN-nachricht des edit-control im
          //mainDlg-callback abzufangen, diese eigene nachrichtenschleife des edit's
          //funktioniert nur mit mehrzeiligen eingabefeldern

          switch(message)
          {
          case WM_CHAR:
          {
          if(wParam == VK_RETURN)
          MessageBox(hwnd,"eingabetaste gedrueckt", "Info", MB_OK|MB_ICONINFORMATION);
          //oder was auch immer hier passieren soll
          }
          break;
          }
          return CallWindowProc((WNDPROC)WndProcEdit, hwnd, message, wParam, lParam);
          }
          </pre>
          gruss ro

          Comment


          • #6
            Danke!<br>
            das ist einfach die nachrichten verarbeitung,oder? hm..
            (in MFC ein wenig anders)<br>dann muss ich mal sehn wie ich das in ein List ctrl reinsteck..

            Comment

            Working...
            X