Sign in to follow this  
KluBits

Win32 Data type conversions

Recommended Posts

KluBits    122
Okay, i dunno if this is a stupid question, but since I am in the beginner section, I'll give it a wizz. Here's my problem: I recently migrated from VB to c++ and now I'm busy learning the Win32 API, so i created a dialog where the user could enter a name of a window and it would close that window: char Bt[80]; HWND khWnd; case 1006: GetDlgItemText(hWnd, 1003, Bt, 80); // 1003 is the name of the TextBox :S khWnd = FindWindow(NULL, Bt); SendMessage(kHwnd, WM_CLOSE, NULL, NULL); okay, so everything that should happen up to there happens, heres my problem: SetDlgItemText(hWnd, 1004, khWnd) // 1004 is the Label that should display the Handle to the window The problem, param 3 won't accept type HWND, only LPCTSTR, so how do I convert HWND to LPCTSTR, i have tried (LPCTSTR)khWNd, (char)khWnd, hell i even tried a reinterpred_cast, what ever the hell that is, when i try the conversion, the program compiles but nothing appears on the label. Could someone please help Me Thank You.

Share this post


Link to post
Share on other sites
Sneftel    1788
The third argument to SetDlgItemText is the text that should be copied to the control. "LPCTSTR" is Hungarian for "C-style string". You can't cast from a HWND to a string because that makes no sense.

Share this post


Link to post
Share on other sites
nprz    692
The third parameter is supposed to be LPCTSTR, which is a pointer to a Cstring that you want it to be set to, which is what your Bt is.

Share this post


Link to post
Share on other sites
nprz    692
SetDlgItemText(hWnd, 1004, khWnd) // 1004 is the Label that should

instead of khWnd (third parameter), you could have something like Bt or another char array.

char newText[] = "Label caption";
SetDlgItemText(hWnd, 1004, newText); // I think something like this should work.

Share this post


Link to post
Share on other sites
Liam M    223
SetDlgItemText() is used to set the contents of a text box item. the first parameter is the handle to the window, the second is the ID of the control, and the third is the text you want to change it to. so by calling:

SetDlgItemText(hWnd, 1004, "Foobar");

The text box, identified by the ID 1004, will now contain the text "Foobar".

When you say "display the handle to the window", what exactly do you mean?

Share this post


Link to post
Share on other sites
ApochPiQ    23064
Unlike VB, C++ (and most lower-level languages) do not let you convert data between different types implicitly; this is known as static typing compared to VB's dynamic typing. While in VB you can turn an integer into a string magically, statically typed languages don't permit this.

In C++, to convert types, you use an intermediate object. Converting to a string is best done with an ostringstream object*:


// Top of your file
#include <sstream>
using std::ostringstream;

// Conversion point in code
ostringstream ConvertStream;
ConvertStream << khWnd;
SetDlgItemText(hWnd, 1004, ConvertStream.str().c_str());


This code basically puts the value of khWnd into the stream (with the << operator) and then converts the stream into a C++ string. The string is obtained by calling str() on a stringstream object. The string in turn has a function c_str() which will return a value that is essentially the same as an LPCTSTR.


On the off chance that you're using MFC, the MFC style solution is this:
CString text;
text.Format("%u", khWnd);
SetDlgItemText(hWnd, 1004, (LPCTSTR)text);


MFC's CString class has a function Format() that lets you use a C printf() style syntax to construct a string; see the documentation on printf() for some details on what it can do. The class also has a special conversion function that returns an LPCTSTR - which, for reference, stands for Long Pointer to Constant Terminated STRing - meaning that the pointer is 32 bits, the data at the pointer will not be modified (Constant), and the string ends with a null terminator (a byte with a value of 0).


*Disclaimer: I'm used to working with Visual C++ 6.0, which has a less-than-standard implementation of the C++ standard classes. Some of the classes and header files I mention may be different in standards-compliant compilers.

Share this post


Link to post
Share on other sites
KluBits    122
wow, great, just what i needed, thanx ApochPiQ

Oh and Liam M in windows, every window that is created is assigned a unique number, this is called its handle, and when i say "display the handle to the window", i mean take that number and print it on a label on my dialog.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this