Sign in to follow this  
n4gix

Values in GDI+ DrawString

Recommended Posts

Okay here's a new question. I'm typically used to being able to get a Token Variable's value and display it in a string using this:lookup_var(&TokenVar);FLOAT64 val_TokenVar = TokenVar.var_value.n;or something similar. The DrawString method is like this:graphics.DrawString(L"LBS X 1000", -1, &font, pointFtot, &solidBrushText);Okay but I want to put a FLOAT value as the string (this is for a fuel gauge). I've tried:graphics.DrawString(L"%f", val_TokenVar, -1, &font, pointFtot, &solidBrushText);and it obviously didn't work (I can't just throw a new argument into the call, I understand that. My question is this:How DO I make those "%f" values show up?Thanks

Share this post


Link to post
Share on other sites
Help AVSIM continue to serve you!
Please donate today!

Use wsprintf. ex.//------------------------lookup_var(&TokenVar);FLOAT64 val_TokenVar = TokenVar.var_value.n;wchar_t ws_str = malloc(128 * sizeof(wchar_t)); (*ws_str) = 0;wsprintf(ws_str,L"%f",val_TokenVar);graphics.DrawString(ws_str, -1, &font, pointFtot, &solidBrushText);free(ws_str);//----------------------Hope it helps.Kioussis Konstantinos

Share this post


Link to post
Share on other sites

Kioussis,Thanks. I appreciate your help. I'll give this a shot.

Share this post


Link to post
Share on other sites

Okay, I gave it a shot, and I got a few errors that I'm not sure how to fix:...fuelstat.cpp(217) : error C2440: 'initializing' : cannot convert from 'void *' to 'wchar_t' There is no context in which this conversion is possible...fuelstat.cpp(218) : error C2100: illegal indirection...fuelstat.cpp(219) : error C2664: 'wsprintfW' : cannot convert parameter 1 from 'wchar_t' to 'LPWSTR' Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast...fuelstat.cpp(220) : error C2664: 'Gdiplus::Status Gdiplus::Graphics::DrawString(const WCHAR *,INT,const Gdiplus::Font *,const Gdiplus::PointF &,const Gdiplus::Brush *)' : cannot convert parameter 1 from 'wchar_t' to 'const WCHAR *' Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast...fuelstat.cpp(221) : error C2664: 'free' : cannot convert parameter 1 from 'wchar_t' to 'void *' Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style castHere's what I typed. The gauge itself is a fuel status gauge that measures the amount (in lbs) of fuel in the tanks. wchar_t ws_str_l = malloc(128 * sizeof(wchar_t));(*ws_str_l) = 0;wsprintf(ws_str_l, L"%f", val_lqty);graphics.DrawString(ws_str_l, -1, &font, pointFlfl, &solidBrushText);free(ws_str_l);I'm newish to gauges in general and very new to GDI+ so any help is greatly appreciated.

Share this post


Link to post
Share on other sites

Change thiswchar_t ws_str_l = malloc(128 * sizeof(wchar_t));towchar_t* ws_str_l = malloc(128 * sizeof(wchar_t));

Share this post


Link to post
Share on other sites

Okay, that knocked back most of the errors. The one remaining has an obvious solution, but my attempts to solve it produced more errors. (Gotta love this stuff!)...fuelstat.cpp(217) : error C2440: 'initializing' : cannot convert from 'void *' to 'wchar_t *' Conversion from 'void*' to pointer to non-'void' requires an explicit castI've tried :wchar_t* ws_str_l = malloc(128 * sizeof((float)(wchar_t));and even:(float)wchar_t* ws_str_l = malloc(128 * sizeof((float)(wchar_t));(no laughing too hard!)By the way, what exactly is the difference between:wchar_t ws_str_l = malloc(128 * sizeof(wchar_t)); andwchar_t* ws_str_l = malloc(128 * sizeof(wchar_t));?Thanks

Share this post


Link to post
Share on other sites

That particular method is using the (Sizeof) to dynamically set the character array's size based on the input variable.Being more conservative, since I already know what size to expect, I simply declare it explicitly as n + 1. Note also that I use swprintf*...SolidBrush blackBrush(Color(255, (8*brt)/100, (8*brt)/100, (8*brt)/100));FontFamily Arial(L"Arial");Font LargeNumbers(&Arial, 62*dy, FontStyleRegular, UnitPixel);Font SmallNumbers(&Arial, 33*dy, FontStyleRegular, UnitPixel);lookup_var(&RECIP_ENGINE1_OIL_PRESS_PSFvar);eng1_op = PSF_TO_PSI(RECIP_ENGINE1_OIL_PRESS_PSFvar.var_value.n);WCHAR eng1_op_wch[3] = L"";swprintf(eng1_op_wch, L"%2.0f", eng1_op);PointF pointOP(375*dx, 308*dy);graphics.DrawString(eng1_op_wch, -1, &SmallNumbers, pointOP, &blackBrush);*NOTE: sprintf returns the number of bytes stored in buffer, not counting the terminating null character. swprintf returns the number of wide characters stored in buffer, not counting the terminating null wide character.swprintf is a wide-character version of sprintf; the pointer arguments to swprintf are wide-character strings. Detection of encoding errors in swprintf may differ from that in sprintf. swprintf and fwprintf behave identically except that swprintf writes output to a string rather than to a destination of type FILE.

Share this post


Link to post
Share on other sites

Well, Bill, Once again, I owe you a thanks. That seems to have nailed it!I appreciate all the help guys.

Share this post


Link to post
Share on other sites

>Well, Bill, Once again, I owe you a thanks. That seems to>have nailed it!>>I appreciate all the help guys.No problem... I don't mind folks asking questions, because more often than not, I wind up learning something new myself! ;)The main thing to keep in mind is that you can only "print" string data in GDI or GDI+, so all numbers must be converted to character strings.Also, int variables won't work at all, but must be converted to FLOAT64 first...

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