|
> Does that help?
Not particularly, but your the only one responding to any
message I post.
For that sample project, a View is deleted when the user
goes to another view. Consequently, any data that the user
might have typed in is gone. Is there away to redo that code
in MainFrm.cpp so that the View remains and that data remains
from screen to screen? If it did remain, I would have a
better chance at saving it.
save it.
|
|
|
|
|
DanYELL wrote: Is there away to redo that code
in MainFrm.cpp so that the View remains and that data remains
from screen to screen?
Of course there is but there are other ways that are a better design. The Model View Controller[^] Design Pattern is preferred. MFC Document/View is much like MVC. In MVC the "Model" is a "Data Model". This can mean an Object structure that represents the Data for the application and it's relationships.
A primary design principle of MVC is that "Views" do not maintain the application data. This way the "View" classes uphold the "isolation" principle since they do not require any relationships. Of course the same is true for the "Serialization" code, it can exist in isolation from the "Views" and the "Controller" logic.
In MFC Doc/View the Document class can be used as the interface to the "Model". So if a "View" provides a user interface for the user to enter data, at the appropriate time the data is routed into the "Model" for storage. Then all the "Views" have access to the Data through the "Model". Note: "The appropriate time" is application dependent and associated to one or more events.
In some MFC applications the Document class "is" the Model. In others it just provides an entry point or "interface" into the Model. Regardless of any specific implementation the Document class can then access the Data for the purpose of Serialization (Save/Load).
So you need to know (analysis) when, what event(s), you should use to trigger routing the view(s) data through or into the CDocument class. Then when you need to "Save" the data is all available to the CDocument class for Serialization. When you "Load" the CDocument class handles Deserialization and initializes the data from the persisted storage. Then of course the "Views" can display the data by getting it from the CDocument class.
I hope that helps
"Just about every question you've asked over the last 3-4 days has been "urgent". Perhaps a little planning would be helpful?" Colin Angus Mackay in the C# forum
led mike
|
|
|
|
|
hello,
is there any way to find out if a certain character (eg unicode U+30aa) is included in a font using the gdi+ framework (other than drawing the character and checking if you get the empty box) ? any hint to a gdi or win32 api function would also be fine. thanks.
martin
|
|
|
|
|
If your into OpenType font files, check out the "cmap" table.
From Microsoft Typography...
"Character codes that do not correspond to any glyph in the font should be mapped to glyph index 0"
OpenType Specification[^]
Just be forewarned, the file tables and structures are in Big-Endian which is a big pain in the tush.
|
|
|
|
|
Hello all
I am transferring an exe file over a socket to some remote pc. Now the problem is when i run this exe on remote pc, it doesnt work properly. I checked few things like my transfer code which works well (i checked with different file types like .cpp,.txt file and also the size on both side is same). Also i did the file comparision of both the files using DOS command fc.(i sent the file on same pc over socket n did it) and there is no difference in both files. When i run the received file,it gives me a error as
"C:\DOCUME~1\....TEMP\. A temporary file needed for initialization could not be written to. Make sure that the directory path exists,and the disk space is available. Choose 'close' to terminate the application"
I sm unable to get the error as i m the administrator of the pc and the disk is also not full.
Please suggest me a way out of it.
thanks
kunal s patel
|
|
|
|
|
Did you read the exe file through binary?
if(no)
{
try it;
}
hope it helps!
|
|
|
|
|
i used the CreateFile API. In that what flags shud i set.
thanks
kunal
|
|
|
|
|
Hi,
I have created MFC SDI application. It is working except "Edit" part of the menu. Do I need to modify any code to make it work? I am not able to cut, copy or paste using it.
Thanks,
Harsha
|
|
|
|
|
harsha1305 wrote: I am not able to cut, copy or paste using it.
What are you trying to copy/cut from, or paste into?
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
Hi,
Those Cut/Copy/Paste are not active. Those look deactivated. I am not able to click on it. I have an edit box in the application, where I have typed text. I am not able to copy it using this control.
If you have any suggestion, please let me know.
Thanks,
Harsha
|
|
|
|
|
harsha1305 wrote: Those Cut/Copy/Paste are not active. Those look deactivated.
You need to provide handlers for them. Use ClassWizard (Ctrl+W) for this.
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
How to use copy and paste and whats your code for copy and paste
whitesky
|
|
|
|
|
Hi,
I have derived a class from CProgressCtrl. In OnPaint() I do my painting of the current progress which works fine. But there is a problem when the application uses XP themes: There is no border drawn around the control. I can draw the border myself, but then I got problems with win2000 (-> 2 borders). Does anyone know how to enable the border for a ownerdraw progress control ?
thanks
|
|
|
|
|
You use DrawThemeBackground() to paint a themed control. For a progress bar, call it with the PP_BAR part to draw the border/background, then call it with the PP_CHUNK part to draw the progress indicator.
--Mike--
Visual C++ MVP
LINKS~! Ericahist | PimpFish | CP SearchBar v3.0 | C++ Forum FAQ
VB > soccer
|
|
|
|
|
Hi,
thank you for your fast reply.
I think DrawThemeBackground with PP_BAR will draw the "theme'd" border with round edges. What I want to do is a progress control that looks like a sunken static. The control should just look like a non themed control.
|
|
|
|
|
|
Yes, ok that's what I want to do. But 1.) Win2000 and 2.) Win XP with DEACTIVATED themes draw the border alone. I can't prevent this.
And 3.) Windows XP with themes ACTIVATED doesn't draw the border. So if I put some code in the OnPait Proc. to draw a border, the control looks fine in condition 3.). But in condition 1.) + 2.) I got two borders: The one that I draw myself and the one that the OS draw.
So I don't know how to solve this...
|
|
|
|
|
Oh, sorry, I didn't finish my thought in my earlier post. It would probably be easier to draw the entire thing yourself (that's where I was going with the "so it looks the same on all OSes"). Use some other control like a button that has an owner-draw style, and then do all the drawing in response to the WM_DRAWITEM message sent by the control.
--Mike--
Visual C++ MVP
LINKS~! Ericahist | PimpFish | CP SearchBar v3.0 | C++ Forum FAQ
VB > soccer
|
|
|
|
|
I've tried this:
CString str = "0x1";
char *ps;
ps = str.GetBuffer(4);
str.ReleaseBuffer();
// Check if the string starts with a '0x'
if(nStringSize > 2 && ('0' == string[0]) && (('x' == string[1]) || ('X' == string[1])))
{
for(i = 2; i < nStringSize; i++)
{
cReturn = cReturn*16;
// Decode ASCII
if((string[i] >= '0') && (string[i] <= '9'))
cReturn += string[i] - '0';
else if((string[i] >= 'A') && (string[i] <= 'F'))
cReturn += string[i] - 'A' + 0xa;
else if((string[i] >= 'a') && (string[i] <= 'f'))
cReturn += string[i] - 'a' + 0xa;
else
// Incorrect character
return 0;
}
return cReturn;
}
else return atol(string);
I get the following error:
error C2440: '=' cannot convert 'wchar_t*' to 'char*'
I've also tried many other ways to convert CString to char* but I still get errors...
Kitty5
|
|
|
|
|
|
okey yes i did that but now i'm getting a corruption problem.
I did this:
sscanf( userIn, "%s %s %s %s", device.GetBuffer(25), cmd.GetBuffer(25), input1.GetBuffer(25), input2.GetBuffer(25) );
I know that:
input1 has been assigned 0x1 b/c I do an AfxMessageBox(input1)
then when I do:
char *str = input1.GetBuffer();
AfxMessageBox(input1); //to check to see if input1 is still ok.
input1.ReleaseBuffer();
I find that input1 has been corrupted:
input1 is not equal to garbage.
how do I assign the value of the CString input1 to a char*?
Kitty5
|
|
|
|
|
kitty5 wrote: sscanf( userIn, "%s %s %s %s", device.GetBuffer(25), cmd.GetBuffer(25), input1.GetBuffer(25),
Don't use sscanf for string parameters; you will always get unexpected behaviors.
kitty5 wrote: char *str = input1.GetBuffer();
AfxMessageBox(input1); //to check to see if input1 is still ok.
input1.ReleaseBuffer();
When you call GetBuffer, you cannot do ANYTHING with the CString object until you call ReleaseBuffer. In the above case, you should just be calling AfxMessageBox(input1); without the GetBuffer/ReleaseBuffer calls.
CString has an explicit conversion operator to LPCTSTR (which is a const TCHAR* -- which equates to const char* in non-UNICODE builds).
To simply your code, write a split function that takes a delimiter (which would be a space in this case) and parses a given CString and places the split CStrings into a CString Array. You will make your life much easier.
If you decide to become a software engineer, you are signing up to have a 1/2" piece of silicon tell you exactly how stupid you really are for 8 hours a day, 5 days a week
Zac
|
|
|
|
|
Zac Howland wrote: To simply your code, write a split function that takes a delimiter (which would be a space in this case) and parses a given CString...
Why not just use AfxExtractSubString() ?
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
AfxExtractSubString is too clumbsy.
Something like this works well for splitting multiple values:
void Split(CString strText, CString strSeparators, CStringArray& strArray)<br />
{<br />
int start = 0;<br />
while (start >=0 && start < strText.GetLength())<br />
{<br />
int stop = strText.Find(strSeparators, start);<br />
if (stop < 0 || stop > strText.GetLength())<br />
stop = strText.GetLength();<br />
strArray.Add(strText.Mid(start, stop - start));<br />
start = stop + 1;<br />
}<br />
}
If you decide to become a software engineer, you are signing up to have a 1/2" piece of silicon tell you exactly how stupid you really are for 8 hours a day, 5 days a week
Zac
|
|
|
|
|
Zac Howland wrote: AfxExtractSubString is too clumbsy.
How so?
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|