|
Thanks for the assist, PJ. Sorry I wasn't too clear. The others were on the right track though and I have things working. The va_ macros are for building a function that receives a variable argument list. In my situation though, it was more that I had a variable number of elements to pass to a function. The odd part is that the variable number wouldn't be known until runtime when the format string is picked up from a database call.
Appreciate the help though.
Chris Meech
I am Canadian. [heard in a local bar]
Gently arching his fishing rod back he moves the tip forward in a gentle arch releasing the line.... kersplunk [Doug Goulden]
|
|
|
|
|
Assuming you don't want to do this:
CString str,fmt;
CStringArray arr;
fmt = _T("%s blah %s blah ... %s blah");
str.Format(fmt,arr[0],arr[1],...,arr[]); I don't think FormatV will do what you want. It's used within functions that have variable numbers of arguments. Any approach like this will also behave badly if there's a mismatch between the number of %s format specifiers and the number array elements.
Something like the following ought to do it:
CString str,fmt;
CStringArray arr;
fmt = _T("%s blah %s blah ... %s blah");
str = fmt;
int offset = str.Find(_T("%s"));
int index = 0;
while ((offset >= 0) && (index < arr.GetSize())) {
str = str.Left(offset) + arr[index++] + str.Mid(offset+2);
offset = str.Find(_T("%s"),(offset+2));
}
Software Zen: delete this;
|
|
|
|
|
Thanks Gary. That code looks exactly like what I need. And you are right the FormatV call isn't going to help me out.
Chris Meech
I am Canadian. [heard in a local bar]
Gently arching his fishing rod back he moves the tip forward in a gentle arch releasing the line.... kersplunk [Doug Goulden]
|
|
|
|
|
Looking back over the code I supplied, it has one slight bug: if the strings being substituted into the format include "%s" , the substitution will take place there, rather than in the original format. To fix it, use the following instead:
CString str,fmt;
CStringArray arr;
fmt = _T("%s blah %s blah ... %s blah");
str = fmt;
int offset = str.Find(_T("%s"));
int index = 0;
while ((offset >= 0) && (index < arr.GetSize())) {
str = str.Left(offset) + arr[index] + str.Mid(offset+2);
offset = str.Find(_T("%s"),(offset+arr[index].GetLength()));
index++;
} Sorry about that .
Software Zen: delete this;
|
|
|
|
|
Good point to mention, although I already have validation checking code prior to doing any of the substittions. The validation code ensures that the number of '%s's in the format string match the number of substition strings in the string array and that the substitution strings in the string array do not contain a '%s'. Thanks for the code and help. It's much appreciated.
Chris Meech
I am Canadian. [heard in a local bar]
Gently arching his fishing rod back he moves the tip forward in a gentle arch releasing the line.... kersplunk [Doug Goulden]
|
|
|
|
|
I am doing a document template project and I want to add a line indicator beside the edit area to show line number of each line. Does any body know how to do it? Thanks.
Maggie
|
|
|
|
|
|
|
Please, what´s wrong??
Why the variable "xyz[1]" don´t assigning value "1"???
#include "windows.h"
#include "stdio.h"
#include "iostream.h"
#include "string.h"
#include "stdlib.h"
char palav[8];
char xyz[6];
void main()
{
//(......)
cout << "\n\n\nWrite a word : ";
cin.getline (palav, 8, '\n');
switch (palav[0])
{
case '"A"':
xyz[1] = "1"
case '"B"':
xyz[1] = "2";
case '"C"':
xyz[1] = "3";
case '"D"':
xyz[1] = "4";
case '"E"':
xyz[1] = "5";
case '"F"':
xyz[1] = "6";
case '"G"':
xyz[1] = "7";
case '"H"':
xyz[1] = "8";
case '"I"':
xyz[1] = "9";
case '"J"':
xyz[1] = "0";
}
cout << "Caracter1 " << xyz[1] << endl;
//(.....)
}
erro:
error C2440: '=' : cannot convert from 'char [1]' to 'char'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast.
raf-sp@bol.com.br
|
|
|
|
|
xyz[1] = '1';
not
xyz[1] = "1";
|
|
|
|
|
This code should not have compile without errors.
CORRECTION:
switch (palav[0])
{
case 'A':
xyz[1] = '1'
break;
case 'B':
xyz[1] = '2';
break;
case 'C':
xyz[1] = '3';
case 'D':
break;
xyz[1] = '4';
case 'E':
break;
xyz[1] = '5';
break;
case 'F':
xyz[1] = '6';
break;
case 'G':
xyz[1] = '7';
break;
case 'H':
xyz[1] = '8';
break;
case 'I':
xyz[1] = '9';
break;
case 'J':
xyz[1] = '0';
break;
}
INTP
"The more help VB provides VB programmers, the more miserable your life as a C++ programmer becomes."
Andrew W. Troelsen
|
|
|
|
|
Thank´s!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1111
|
|
|
|
|
I have an app whs entering MTA instead STA by calling
HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
Now on Windows XP OS all common openfile dialogs behave
'microsoft way'
Any FileOpen Dialog even the style is OFN_EXLORER, or not, or
even I am using extended structure to get the XP left crap I get
folowings.
Current browsing folder have only bmp files.
In FileType Combobox I have 2 file filters, eg. (*.bmp) and (*jpg)
Default selection is bmp. I see the bmp files in the listview.
I am changing the File Types: to jpg. The list view is empty.
Now I change back to bmp. The list box is still empty !!!. There is no way to repopulate the list view unless I type explicit the *.bmp
in the File Name Edit Control.
Also none of the rich edit controls work. They crash.
If I join a STA CoInitialize() everithing is OK but I need the MTA.
If you know any work around couse I searched at msdn and ...
Thank you.
|
|
|
|
|
RIch Edit is still screwed up at least I solve it with the dialog:
BOOL OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
BOOL ret = CFileDialog::OnNotify(wParam, lParam, pResult);
OFNOTIFY* pNotify = (OFNOTIFY*)lParam;
switch(pNotify->hdr.code)
{
case CDN_TYPECHANGE:
{
CWnd* pWnd = GetActiveWindow();
CWnd* PDlg = pWnd;
if(pWnd)
{
GetFocus()->PostMessage(WM_KEYDOWN,VK_RETURN,0);
GetFocus()->PostMessage(WM_KEYUP,VK_RETURN,0);
}
}
break;
}
return ret;
}
|
|
|
|
|
How do you include a thousands separator in a C++ program. The separator will be used for input i.e., 2,000 and output i.e., 2,000. For now the input is more important.
For example you will be prompted to enter Your Amount: $2,000.00. When I run this now the comma throws the whole calculation off.
|
|
|
|
|
|
i cant understand why this is exiting the loop even if its false, what have i done wrong?
<i> do{
DateFormatValid = true;
cout << "Enter Date (DD"<<SEPERATOR<<"MM"<<SEPERATOR<<"YYYY)";
fflush(stdin);
cin.getline (Date,MAX_INPUT_BUFFER);
cout << endl;
if
(isdigit (Date[0]) && isdigit (Date[1]) && Date[2] == SEPERATOR
&& isdigit (Date[3]) && isdigit (Date[4]) && Date[5] == SEPERATOR
&& isdigit (Date[6]) && isdigit (Date[7]) && isdigit (Date[8]) &&
isdigit (Date[9]) && strlen(Date) == DATE_LEN)
{
DayStr[0]=Date[0];
DayStr[1]=Date[1];
DayStr[2]='\0';
iDay = atoi(DayStr);
MonthStr[0]=Date[3];
MonthStr[1]=Date[4];
MonthStr[2]='\0';
iMonth = atoi(MonthStr);
YearStr[0]=Date[6];
YearStr[1]=Date[7];
YearStr[2]=Date[8];
YearStr[3]=Date[9];
YearStr[4]='\0';
iYear = atoi(YearStr);
DateFormatValid = DateValid(iDay, iMonth, iYear);
}
else
{
DateFormatValid = false;
cout << "Date Format Invalid";
cout << endl;
}
}while (DateFormatValid == false);</i>
(DateFormatValid is a function)
HELP!!!
|
|
|
|
|
Does anyone know if it's possible to open and read the contents of Outlook PST files via some API?
|
|
|
|
|
I am not aware of anyway to directly access Outlook pst files, however, the Outlook Object Model would provide an indirect way to not only examine the contents of this file but also to manipulate it.
|
|
|
|
|
I was trying to display a jpeg picture in a window so i tried the Ole approach, but in all functions they use a constant HIMETRIC_INCH, which is apparently not declared in my header files.. which I think is very odd seeings i never saw anyone else complain about it in the comments.. I have Visual Studio 6.0 and I also have an up-to-date SDK installation. What's going on?
Kuniva
--------------------------------------------
|
|
|
|
|
"Search Results for HIMETRIC_INCH - 0 topics found" - Are you sure this constant does exist as normal windows constant?
Don't try it, just do it!
|
|
|
|
|
Well i got the functions from http://www.codeproject.com/bitmap/render.asp[^]. But i've also seen it used in various other articles that use the Ole way to load pictures. So yea.. it probably exists.. but seeings it's just a constant, maybe someone could just supply me with the value?
Kuniva
--------------------------------------------
|
|
|
|
|
HIMETRIC = 1/100th of a millimeter
25.4mm per inch
#define HIMETRIC_INCH 2540
Pssst. You see that little light on your monitor? That's actually a government installed spy camera. Smile and wave to big brother!
|
|
|
|
|
Jack Rabbit is correct!
I recommend you get a copy of 'Agent Ransack' and use it to search "C:\Program Files\Microsoft Visual Studio\VC98\", when ever you cann't find something you believe is there. Sometimes you need to do that just to find the correct header files, when MSDN fails to specify them.
I did that just incase it was and found:
#define HIMETRIC_INCH 2540 // HIMETRIC units per inch
defined internaly in the file "WINGDIX.CPP".
INTP
"The more help VB provides VB programmers, the more miserable your life as a C++ programmer becomes."
Andrew W. Troelsen
|
|
|
|
|
How odd I don't have a file WinGDIX.h... neither in my vc6 include directory, nor my ms sdk include directory.. weird.. guess it's update time. But thank you both for the replies
Kuniva
--------------------------------------------
|
|
|
|