|
Hi I am trying to migrate my VC6 MFC Application to VS2005 Beta 2
The App. uses a call to AfxLockGlobals but this function seams to be excluded from the new Version of MFC (V8).
Is there any possibility to use this function or there is any alternative for what this function does?
Saurabh Gupta
|
|
|
|
|
I have a .dll that i am writing and cannot use standard MFC classes such as CString to parse a blob of data. So i am using std::string but i have never used this before and am so confused. I need to search a string for a key word. Once i find the keyword, i have to parse the data afterwards to pick out the necessary data that i need.
I am using the find method but just stuck and confused to accomplish my goal. Can anyone offer some examples or help? E.g.
If i have a string that looks like
xxxcdfdftbvbfggbnghghg Name: Todd Shields ccfgfgnfgnrri DOB:091580 hgertrtreggeegegggggggggggg
But i want to get the name and the DOB. There is no standard in terms of how much space is allocated for name or DOB. I just have to find it and get the name and DOB from the string.
Any input is appreciated.
|
|
|
|
|
Something like:
string s = "xxxcdfdftbvbfggbnghghg Name: Todd Shields ccfgfgnfgnrri DOB:091580 hgertrtreggeegegggggggggggg";
int nPos1 = s.find("Name: ");
int nPos2 = s.find("DOB: ");
string name = s.substr(nPos1 + 5, nPos2 - nPos1);
"Ideas are a dime a dozen. People who put them into action are priceless." - Unknown
|
|
|
|
|
typedef std::string::size_type size_type;
std::string name_string = "Name:";
std::string dob_string = "DOB:";
size_type name_index = mystring.find(name_string);
size_type dob_index = mystring.find(dob_string,name_index+name_string.size());
OR
size_type name_index = mystring.find(std::string("Name:"));
size_type dob_index = mystring.find(std::string("DOB:",name_index+4);
Both of the above ass-u-mes all the data is there (no error checking).
You can access indivual characters using operator[], for simple parsing.
// If you need compare
int compare(
size_type p0, // index into mystring
size_type n0, // number of characters to compare
const basic_string& str);
If you want to go back in time, then you can get a C-string pointer by call mystring.c_str().
The just write the parsing code the same as you would in C.
INTP
"The more help VB provides VB programmers, the more miserable your life as a C++ programmer becomes."
Andrew W. Troelsen
|
|
|
|
|
What would be the return on the find? Would it return -1 if failed?
Where is some decent documentation on this that you would recommend. I have a decent start but i feel i may need some more methods for parsing.
Like for example. If a name is Todd Shields, i have to break up into first name and last name. So i would have to loop through and parse until i get a space and that will be my first name.
How is the operator[] used?
Thanks
|
|
|
|
|
LCI wrote:
What would be the return on the find?
The index/offset of the first character in the string you are searching that matches what you are searching for.
LCI wrote:
Would it return -1 if failed?
It returns std::string::npos, which is -1.
LCI wrote:
How is the operator[] used?
for( size_type i=0; i<mystring.size(); ++i )
char c = mystring[i];
As for parsing; the simpilist method is to use loops, as you suggested.
Documentation:
1) "The C++ Programming Language" by Bjarne Stroustrup (The Creator of C++), whatever the latest vesion is.
2) Search the web for keywords like: "Bjarne Stroustrup", "P.J. PLAUGER" (The guy who (probably) wrote the template library you're using), STL (The Standard Template Library), etc... . There are lots of sights that cover this subject.
INTP
"The more help VB provides VB programmers, the more miserable your life as a C++ programmer becomes."
Andrew W. Troelsen
|
|
|
|
|
Hi,
I have written a class, CWizardSheet, which extends CPropertySheet. It is set to wizard mode. An instance of CWizardSheet, contains several pages, which extend CPropertyPage, so naturally I have to do directive includes for these pages in the CWizardSheetClass. However, CWizardSheet has a variable, info, which I would like each of the pages to be able to access.
I have tried to do a directive include of the CWizardSheet in the pages, but that causes problems because of cyclic redefinition. I have also tried to add a 'set' method in each of the pages so that I can 'send' a pointer to the variable from the CWizardSheet's OnInit() method.
The problem with the second approach is that after I leave a page (clicking next), if I decide to come back to it (clicking back), if I make changes to the variable, it no longer changes the info variable in the CWizardSheet.
To solve this, I have decided that instead of 'setting' the variable in the OnInit() method in the CWizardSheet class, I should do it in another method which is called every time that the wizard changes to another page (set the top level page's variable).
My question is: Is there a method in CPropertySheet that I can override to catch the event when the wizard changes the top page, and if so, how do I use it and is it possible to get a pointer to that page? Other suggestions to solve this problem are also welcome.
Thanks in advance,
-----------------
Genaro
\\\|
_ _
@ @
_\\
--|
_/
|
|
|
|
|
picazo wrote:
However, CWizardSheet has a variable, info, which I would like each of the pages to be able to access.
In the CPropertyPage -derived class, call GetParent() , and cast the result to a pointer to your CPropertySheet derived class.
picazo wrote:
My question is: Is there a method in CPropertySheet that I can override to catch the event when the wizard changes the top page
No, but you can handle OnSetActive in the CPropertyPage -derived class.
|
|
|
|
|
Thank you very much for your response. I had already figured it out, but its good to know that you would have done it the same way.
|
|
|
|
|
Hi,
I'm trying to implement a dialog bar in my MDI application. First, for some reason any ON_BN_CLICKED handler that I add to the CDialogBar derrived class doesn't get handled. The buttons are still greyed out. I have to manually add ON_BN_CLICKED handler to the CMainFrame at which point the function inside CMainFrame never gets called but the one inside CDialogBar does. That's weird.
What I really want is to be able to handle dialog bar commands inside the CDocument. Do I have to route them manually from CMainFrame? I was hoping a DialogBar would behave like a control bar and I could easily add handlers inside the CDocument, but that doesn't look like it.
Thanks.
|
|
|
|
|
Also I have a class that I derrived from CDialogBar. Inside it I have a function to disable my controls that contains something like:
CWnd *test = this->GetDlgItem(IDC_ADDKEYFRAME);
test->EnableWindow(FALSE);
this doesn't disable the button. Why not?
I've also tried adding control variables and initialize them using DDX. The variables get initialized, the HWND value match what I get from GetDlgItem call, but the button never gets disabled.
|
|
|
|
|
I want to get a file name back from the saveFileDialog box and store it as a global variable. What Type should I declare this varialbe as? Seems like the return type for the saveFileDialog file name is String and the compliler is not liking this Type..
Anyone have a simple VC++ .NET example on how to get the user selected file name back from the saveFileDialog box and stored in a variable?
Thanks.
|
|
|
|
|
Here's what I have used:
CString strFile;
CFileDialog fSave(parameters);
if ( fSave.DoModal() == IDOK )
{
strFile = fSave.GetFileName();
}
|
|
|
|
|
For whatever reason, my .NET compiler is not liking the declaration of a variable as CString Type. I wonder if there needs to be included another .h file to be able to use String type?
Compiler does not like this:
CString myFileName;
|
|
|
|
|
I figured out what I was doing wrong.
I did not realize that the return type of the file name is a pointer, so it needs to be declated like this.
String *myFileName;
|
|
|
|
|
I understand what this does, but I was wondering how people felt about it.
Is it better to have incremental linking on or off?
and
Do you, personally, prefer to have incremental linking on or off?
|
|
|
|
|
I have "Incremental linking" on, and "Edit and Continue" off by choice.
Link times are notably smaller (and the only glitch that happens is finding a function that no longer exists). E&C is for veebees.
Pandoras Gift #44: Hope. The one that keeps you on suffering. aber.. "Wie gesagt, der Scheiss is' Therapie" boost your code || Fold With Us! || sighist | doxygen
|
|
|
|
|
Why is it that when an XML file is has a root node that looks like this:
-(Test xmlns="urn:response"\)
(MyTest)test data(MyTest)
I can't seem to select singlenode on //Test//MyTest to get the text. But if the 'xmlns="urn:response' is removed to look like:
-(Test\)
(MyTest)test data(MyTest)
then i can selectsinglenode and get the text.
How would i read an xml file with root having a namespace definition??
Please Help
|
|
|
|
|
if no ns means default ns. sepcify in both line ns and it going to work.
|
|
|
|
|
I do not understand.
When i define my tag it is like this
_bstr_t mybstrtagTestText = ("//Test//MyTest");
The above does not work when i do a
MSXML2::IXMLDOMDocument2Ptr pDocument;
MSXML2::IXMLDOMElementPtr pDocRoot;
MSXML2::IXMLDOMNodePtr pTag;
pDocRoot= pDocument->documentElement;
pTag = pDocRoot->selectSingleNode(mybstrtagTestText);
This is because the XML file that i am reading has has a root that looks like
(Test xmlns="urn:response") - I can't change this part
what should i do differently in my code?
|
|
|
|
|
Promlem is in XML
This is invalid XML
<Test xmlns="urn:response"/>
<MyTest>test data</MyTest>
XML document mast have one root node in first case you have two
Test and MyTest
This is valid XML
<Test xmlns="urn:response">
<MyTest>test data</MyTest>
</Test>
|
|
|
|
|
I am using threads and when I compile, it says I have to include /clr in the command line. I added in the managed extension option and saw that /clr had been added. Now, I get the error that says /RTC and /clr cannot both be in the command line. I can not seem to get rid of /RTC. I have tried to use this: #pragma runtime_checks( "", off ) --but it doesn't seem to do anything. Can anyone help me?
|
|
|
|
|
what type 2 i use to add numbers in hex
i have a hex number and i need 2 add 8 in hex each time in a loop
/\|-||\/|/\|)
|
|
|
|
|
Hello
But what types are using for decimal addition ?
int a = 0x12;<br />
int b = 0x56;<br />
int c = a + b;<br />
Does it what you need ? So, you can use any numeric type.
Andrew
|
|
|
|
|
hex is a way to represent values. If you work with integers then you can do:
int a = 0x0a;
for (int i = 0; i < 10 ; i++)
a += 0x08;
Marc Soleda
... she said you are the perfect stranger she said baby let's keep it like this... Tunnel of Love, Dire Straits.
|
|
|
|