2010-12-23 5 views
0

Mit C++ Win32 API habe ich ein Fenster (CreateWindow()) anstelle eines Dialogfelds erstellt. Gibt es Befehle, die "GetDlgItemInt" oder "SetDlgItemInt" ähneln, die stattdessen für das Abrufen und das Festlegen von Daten in einem Bearbeitungsfenster für Win 32 API verwandt werden? Ansonsten muss ich eine Dialogbox erstellen oder einen Haufen Code zum Umwandeln von INTs in eine Zeichenkette und dann wieder zurück machen.Gibt es etwas wie GetDlgItemInt, aber für ein Fenster, das erstellt wurde? Win32 Api

Die Idee ist, dass der Benutzer die Fensterbreite und -höhe spezifiziert, indem er die zwei Bearbeitungsdialoge innerhalb des Fensters eingibt, das ich erstellt habe. Es gibt nette einfache Tutorials, die mir im Grunde sagen, wie man das über eine Dialogbox macht, aber ich würde gerne wissen, ob es ähnliche Funktionen gibt, die ich verwenden kann, die nicht von einer Dialogbox abhängig sind?

Ich hoffe, so etwas zu haben ...

 
xVal = 1280; 
yVal = 720; 
hwndResoX = CreateWindow("edit",xVal, WS_CHILD|WS_VISIBLE|WS_BORDER|ES_NUMBER,20,20,40,20, _hwnd, NULL, NULL, NULL); 
hwndResoY = CreateWindow("edit",yVal, WS_CHILD|WS_VISIBLE|WS_BORDER|ES_NUMBER,80,20,40,20, _hwnd, NULL, NULL, NULL); 

Aber wie Sie sich vorstellen können, kann ich nicht die xVal oder yval in der Create() verwenden, weil ich einen Compiler-Fehler erhalten unter Angabe I kann nicht von INT konvertieren char *

+0

Ich verstehe Sie wirklich Frage nicht. Sie beginnen, indem Sie über GetDlgItemInt sprechen und dann Code anzeigen, der nur einen Aufruf von CreateWindow enthält? In jedem Fall wird die GetDlgItemInt API für jedes Fenster hwnd funktionieren, vorausgesetzt das Fenster hwnd hat ein Kind mit der angegebenen ID. – mrsheen

Antwort

0

einfachste Weg, dies zu tun:

// Create the window. Note that for edits, the caption is not the same as its contents, 
// so we leave that empty here: 
hwndResoX = CreateWindow("edit","", WS_CHILD|WS_VISIBLE|WS_BORDER|ES_NUMBER,20,20,40,20, _hwnd, NULL, NULL, NULL); 

// Now create a string to use to set as the content: 
char content[32]; 
sprintf(content, "%d", xVal); // Recommend using StringCchPrintf if there's any chance that the buffer size might be too small 
SetWindowText(hwndResoX, content); 

Siehe auch this MSDN page bearbeiten Steuerelemente zur Verwendung.

Für die Daten zurück bekommen, verwenden GetWindowText einen String zu erhalten, dann analysieren, die sich mit der angegebenen String-to-int Parsing-Funktion Sie wollen (z. B. strtol, atoi, sscanf, etc.)

Während Sie tun müssen manuell zwischen int und string konvertieren, es ist nicht so viel Code, nur ein paar zusätzliche Zeilen, so viel weniger Aufwand als die Konvertierung zu einem Dialog verwenden.

Nachdem Sie das gesagt haben, wenn Sie hier einen richtigen Dialog verwenden, erhalten Sie ein paar zusätzliche Vorteile: Vor allem der Benutzer kann automatisch von Feld zu Feld wechseln, was Sie in einem Nicht-Dialog aktivieren müssen.

0

Sie können GetDlgItemInt verwenden, geben Sie einfach eine Int-ID für den HMENU-Parameter in CreateWindow an.

Verwandte Themen