|
I have no idea what code is in afxwin2.inl
but it is reported at Line:309
regarding 'is hicon null' I am not sure what you mean.
Thanks Mark
Simon
|
|
|
|
|
Running in the debugger you can step through those two lines
of code and go right to the line of code the assertion occurred on.
You can also easily check the value of hIcon ( a variable in YOUR code).
simon alec smith wrote: it is reported at Line:309
Great info if I had the same version of MFC you do, but I don't.
What's on line 309 of your afxwin2.inl?
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
ok,
running the debugger, the following information is shown
_AFXWIN_INLINE HICON CWnd::SetIcon(HICON hIcon, BOOL bBigIcon)
then the yellow arrow points to the following
{ ASSERT(::IsWindow(m_hWnd)); return (HICON)::SendMessage(m_hWnd, WM_SETICON, bBigIcon, (LPARAM)hIcon); }
Does this shed any light?
Also when I try to dubug straight from the assertion message,(the retry)
the program statement occurs 'the mfc application has encountered a
problem
I notice the icon 'IDR_MAINFRAME' that I have also edited is dispolayed
on the top right
Is this anything significant?
Thanks very much
Simon
|
|
|
|
|
simon alec smith wrote: Does this shed any light?
Indeed, thanks!
You're calling SetIcon() before your window's HWND is created.
Try calling SetIcon() in a WM_CREATE handler (OnCreate()) or any time
after the window is created.
simon alec smith wrote: Also when I try to dubug straight from the assertion message,(the retry)
the program statement occurs 'the mfc application has encountered a
problem
Sounds like a problem with the debugger. I'm not sure there.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Thanks v much I'll try it out
|
|
|
|
|
How can I get CFileDialog in Save As mode to change the default file name extension according to the chosen file type like most MS apps work?
|
|
|
|
|
This could work:
1) Derive a class from CFileDialog
2) Override the OnTypeChange() method (the CDN_TYPECHANGE
notification handler)
3) In your OnTypeChange() override, use CFileDialog::SetControlText()
to set the text for the control containing the filename to the
appropriate default filename (the IDs for the controls can be
found here: Open and Save As Dialog Boxes[^])
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Mark,
OK, but how do I get the filename? I have found some code like this but it doesn't work for some reason:
CWnd *fileNameBox = GetParent()->GetDlgItem(edt1);
ASSERT_VALID(fileNameBox);
CString fileName;
fileNameBox->GetWindowText(fileName);
|
|
|
|
|
How doesn't it work? What is the call to GetParent() doing?
I would think that code would be in the actual dialog class.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
It looks like its failing on the ASSERT. I found this code and I'm not sure why the call to GetParent() is there, I thought maybe it needed a window handle pointer.
The filename string can be obtained after the dlg. closes. But I want to look at what the user has in the file name field and the chosen ext. and make the filename ext change as the ext. changes from the combo field. It seems like this should be a std. way for the dlg to work (MS Office apps work this way).
|
|
|
|
|
If you derived a class from CFileDialog, you
should be able to do something like this:
void CMyFileDialog::OnTypeChange()
{
CWnd *fileNameBox = GetDlgItem(edt1);
ASSERT_VALID(fileNameBox);
CString fileName;
fileNameBox->GetWindowText(fileName);
}
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Hi Mark,
Thanks for your help. Just to follow up on this, it turns out you need the ptr. to GetParent() because the "CFileDialog is actually a child of the real dialog" according to - http://msdn.microsoft.com/en-us/magazine/cc301466.aspx.
So you need something like this to access the file name and type, modify it to the set type and display it:
void CMyFileDialog::OnTypeChange()
{
CFileDialog::OnTypeChange(); // Base class
CString fileName, ext;
GetParent()->GetDlgItemText(cmb13, fileName); // Get file name
GetParent()->GetDlgItemText(cmb1, ext); // Get extension
int i;
if ((i = fileName.ReverseFind('.')) != -1) {
fileName.Truncate(i);
if ((i = ext.ReverseFind('.')) != -1) {
ext.Truncate(i + 4);
fileName += "." + ext.Right(3);
}
}
GetParent()->SetDlgItemText(cmb13, fileName); // Get file name
return;
}
Thanks again,
Darryl
|
|
|
|
|
Darryl Bryk wrote: it turns out you need the ptr. to GetParent() because the "CFileDialog is actually a child of the real dialog"
Good to know!
Thanks for the update!
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Is there a way to do <title>?
|
|
|
|
|
|
|
I am trying to read two cities with their Lat and Longs from a text file so I can compute the distance between them.
the text file format is San Francisco 37:47:48n 122:24:57n Honolulu 21:16:25n 157:49:13w
can anyone tell me how I can read from text file so I can do the math
or does anyone have a similar example out there that they have done.
Thanks
|
|
|
|
|
Split the string into words by looking for spaces, and put this into an array of char * s. Then look to see if the first character of each word is a number or not and if so, remove the end character and split it up by the colons; then simply use atoi() to convert these into numbers and do whatever you want with them
Hope this helps,
--Perspx
"The Blue Screen of Death, also known as The Blue Screen of Doom, the "Blue Screen of Fun", "Phatul Exception: The WRECKening" and "Windows Vista", is a multi award-winning game first developed in 1995 by Microsoft" - Uncyclopedia
Introduction to Object-Oriented JavaScript
|
|
|
|
|
Thanks for the quick reply
what would the code look like to do that, the array I know but atoi() I don't.
what would you do?
Thanks
|
|
|
|
|
After some dabbling in my C IDE, I have come up with this to split the string up and put the lat/longitudes in an array:
char text[] = "San Francisco 37:47:48n 122:24:57n Honolulu 21:16:25n 157:49:13w";
char *input = (char *)text;
char **data = NULL;
char *ptr = NULL;
int i, datacount=0, curr=0, len;
for(i=0;i<(strlen(input)+1);++i) {
if(input[i]==' '||input[i] == '\0') {
len = (i-curr)-1;
ptr = input+curr;
if((ptr[0]>('0'-1))&&(ptr[0]<('9'+1)))
{
datacount++;
data = realloc(data, (datacount+1)*sizeof(char *));
data[datacount]=(char *)malloc(len);
strncpy(data[datacount], input+curr, len);
data[datacount][len]='\0';
}
curr = (i+1);
}
}
You can do something similar to split the numbers with the colons - the atoi() reference is here.
Hope this helps!
--Perspx
"The Blue Screen of Death, also known as The Blue Screen of Doom, the "Blue Screen of Fun", "Phatul Exception: The WRECKening" and "Windows Vista", is a multi award-winning game first developed in 1995 by Microsoft" - Uncyclopedia
Introduction to Object-Oriented JavaScript
|
|
|
|
|
Thank you I really appreciate the assistance, I didn't know there where people out there so willing to help.
Thank you! Thank you! Thank you!
|
|
|
|
|
No probs
Regards,
--Perspx
"The Blue Screen of Death, also known as The Blue Screen of Doom, the "Blue Screen of Fun", "Phatul Exception: The WRECKening" and "Windows Vista", is a multi award-winning game first developed in 1995 by Microsoft" - Uncyclopedia
Introduction to Object-Oriented JavaScript
|
|
|
|
|
2 questions
what do I need to do to finish this?
how would I pull this info if it was in a text file?
Thanks
|
|
|
|
|
- You need to do whatever you need to do with the lat/longitudes stored
- You would use the
ReadFile() function (documentation here).
Hope this helps,
--Perspx
"The Blue Screen of Death, also known as The Blue Screen of Doom, the "Blue Screen of Fun", "Phatul Exception: The WRECKening" and "Windows Vista", is a multi award-winning game first developed in 1995 by Microsoft" - Uncyclopedia
Introduction to Object-Oriented JavaScript
|
|
|
|
|
I am two blocked
I have an error "invalid conversion from void to char" on the:
data = realloc (data, (datacount +1)*size of (char*));
|
|
|
|