|
The BMP format has had a gazillion wrapper classes written for saving and loading it, including some here on the CodeProject.
Christian
I've learned that you cannot make someone love you. All you can do is stalk them and hope they panic and give in.
The early bird may get the worm, but it's the second mouse that gets the cheese.
|
|
|
|
|
Hi,
just for the first part of your question. General way serializing a class.
Have a look on CObject. Generaly you have to derive your class from CObject - and overwrite the
serialise method in your own class.
(DO not forget the macros implement_dyncreate, declare_dyncreate in your class .h/.cpp file)
Have also a look into the document class of your app . There you will find also a serialize method.
When you have a member in your document from your own class, you simply call :
...
m_abc.serialise;
...
in the document serialize class to load or store your class in a file (as binary file).
|
|
|
|
|
If I set window extensions in a CStatic control why allow draw outside of this window extensions. What's the way to fix a limit of draw in a window?
Thanx
Carles
|
|
|
|
|
I have a droplist combobox in a modal dlg called from mainfrm in an SDI.
The combobox must obtain its initial selection ( a CString ) from the selected text in a listcontrol in a dlgbar, also in mainfrm.
How do I accomplish this?
|
|
|
|
|
You should be able to get a pointer to the ComboBox (use .GetDlgItem(ID_OF_COMBO)).
Then with that pointer you should be able to access the members and functions of the
ComboBox (comboBox->...).
Here's an example:
CDialog dlgModal; //initialize the dialog you are about to show.
CComboBox* pCBox = dlgModal.GetDlgItem(ID_OF_COMBO); //get pointer to the ComboBox.
int nDx = pCBox->FindString(-1, "string to find"); //get index of the item you want selected
//the -1 tells it to search from the beginning
...and whatever else you need to do.
...
dlgModal.DoModal(); //display the dialog
I've not done anything quite like what you are attempting, but you should be able to
get a pointer to any control on the form and use that pointer to access its members and functions.
I hope that helps. David.
|
|
|
|
|
Hello, the codegurus around the world.;)
The easiest way to satisfy your requirement is to put public member value like
m_sCurSelectedString in CMyMainFrame.
CMyMainFrame is the parent window of the dialog, dialog bar with ListBox.
I guess that ListBox is the same child level of the dialog bar since ListBox is declared
at CMyMainFrame class?
m_sCurSelectedString is always updated if the user updates the selection of ListBox.
So, when the dialog is opened, m_sCurSelectedString compares the string in ComboBox
in OnInitDialog().
So, how do we access m_sCurSelectedString from Dialog Box?
1) Pass the parent's CWnd of dialog constructor arguement. or
2) Use CWnd::GetParent() or
3) Use AfxGetMainWnd() and cast the pointer of CMyMainFrame.
And, how do we update m_sCurSelectedString of ListBox.
I think that we can use MessageMap of ListBox in CMyMainFrame.
The other way is that we can pass CWnd of ListBox on Dialog Bar
to the consturctor arguemnt of CMyDialog.
At this case, we can direclty access the currnet selected item of ListBox.:cool:
I think that there are several other ways to do this.
Have a nice day!
-Masaaki Onishi-
|
|
|
|
|
In the app class header file, after the app class definition, add the folowing line:
extern CMyApp theApp;
Add these declarations to your app class:
private:
CMainFrame* m_pMainFrame;
public:
CMainFrame* GetMainFramePtr() { return m_pMainFrame);
In the OnInitInstance function of your app class, do this AFTER the main window is created:
m_pMainFrame = pMainFrame;
In the CMainFrame class, put a function that accepts a CComboBox* like so:
int CMainFrame::FillComboBox(CComboBox* pCombo)
{
return pCombo->GetCount();
}
From within the OnInitDialog() function in the dialog box class, call your function like so:
theApp.GetMainFrame()->FillComboBox(&m_ctrlComboBox);
I'm assuming that your dialog box class already has #include "MyApp.h" in it.
|
|
|
|
|
hi there,
following problem:
char g_szOutputFile[_MAX_PATH];
CString pathname;
now i want to copy pathname into g_szOutputFile and i call
strcpy(g_szOutputFile,pathname);
but this doesn't look like it is working, are there any other functions i can call to convert a CString into a char?
thank's in advance,
patrick
|
|
|
|
|
Strange, it's alwayse working perfectly (and doing so now!)
But try to use LPTSTR GetBuffer( int nMinBufLength );
char *c;
CString S;
c = S.Getbuffer(10)
|
|
|
|
|
I'm pretty new to C++, but it seems to me that you can just cast
the CString. I believe you need an LPTCSTR type for the strcpy function,
so I think you can do a simple cast from CString to the LPTCSTR type:
...(LPTCSTR)pathname...
You may need to cast it again such as:
...(LPTSTR)(LPTCSTR)pathname...
David.
|
|
|
|
|
You can try it as such:
char szFileName[MAX_LENGTH];
CString pathname = "c:\temp";
strcpy(szFileName, (const char*)pathname);
|
|
|
|
|
thank's a lot guys, you helped me a lot
patrick
|
|
|
|
|
I Think strncpy should be used for "safer" strcpy
#define STRCPY(d,s)
strncpy( (d), (s), sizeof( (s) ) - 1 );\
(d)[ sizeof((d)) - 1 ] = NULL;\
STRCPY( g_szOutputFile, pathname );
|
|
|
|
|
you can use one of these:
strcpy(g_szOutputFile, (const char*)pathname);
strcpy(g_szOutputFile, (LPCTSTR)pathname);
strcpy(g_szOutputFile, (LPSTR)pathname);
strcpy(g_szOutputFile, pathname.GetBuffer(pathname..GetLength())); pathname.ReleaseBuffer();
|
|
|
|
|
I want to add the capability to my dialog based application so when I start it, it looks to see if any other instances of the application are running. If there is one already running, that instance will be killed and the new instance will be started. How can I do this, I know I have seen it on here before but cannot find the solution. Any help?
Roger Printy
Software Engineer
TeraNex
Orlando, FL
|
|
|
|
|
So what's exactly is the problem? Determining if another instance is running, or terminating it cleanly?
Tomasz Sowinski -- http://www.shooltz.com.pl
|
|
|
|
|
Both really. Like I said, I have done it before just cannot find the source code I used.
Roger Printy
Software Engineer
TeraNex
Orlando, FL
|
|
|
|
|
The following article by PJ Naughter deals with "single-instancing":
http://www.codeproject.com/cpp/csingleinst.asp
However, the code you'll find there closes the second instance (not the original one). To close the original instance, you can send a message to its main window. WM_CLOSE could work here, depending on the actions your program performs on closing. If any msgboxes are displayed (prompt for save, etc.), you can choose to use some private application message.
Tomasz Sowinski -- http://www.shooltz.com.pl
|
|
|
|
|
Works like a dream, it really did not matter which one was closed, probably better to have the new instance stopped rather than the last instance. Thanks!
Roger Printy
Software Engineer
TeraNex
Orlando, FL
|
|
|
|
|
Hi there,
i have got a mfc multithreaded app. which works with avi-files. i use the CFileDialog class to be able to open any avi-file.
now, the problem is, that i need to work with the path name of the avi file. in the CFileDialog class, the path name only comes with one backslash(example: C:\mydir\sample.avi) but i need to convert the pathname to two backslashes to go on in the program (C:\\mydir\\samle.avi) because the functions that work with the avi-file only accept strings.
can anyone help me?
thank's in advance,
patrick
|
|
|
|
|
One of the method of CString class does exactly what you want:
int Replace( LPCTSTR lpszOld, LPCTSTR lpszNew );
Pass single backlash as lpszOld and two backlashes as lpszNew.
Tomasz Sowinski -- http://www.shooltz.com.pl
|
|
|
|
|
Hi Tomasz,
thank's for your quick reply but can you show me how exactly you do that when you have the CString variable C:\myfile\sample.avi and convert it to C:\\myfile\\sample.avi?
thank's again,
patrick
|
|
|
|
|
CFileDialog dlg(...);
if (IDOK == dlg.DoModal())
{
CString strFile = dlg.GetPathName();
strFile.Replace("\\", "\\\\");
AfxMessageBox(strFile);
}
Note that "\\" is in fact one backslash, "\\\\" - two backslashes.
Tomasz Sowinski -- http://www.shooltz.com.pl
|
|
|
|
|
thank's a lot, it works perfect now
regards,
patrick
|
|
|
|
|
I'm pretty new to C++, but this seems weird.
I have written a program just to practice working with CListCtrl. All it does is load the list with a few lines
of stuff (in 3 columns). Then I set some extended styles (select whole line and track select). Then when
the column header is clicked, it sorts the list on that column and puts a little bitmap in the header
to show which column is sorted and whether ascending or descending.
The weird part is this: in one version of the program, it works perfectly in the Release version, but in
the Debug version everytime it gets to the .GetItem line for the CHeaderCtrl it gives me an
"Unhandled exception... Access violation..." error. I couldn't figure out how to fix that, so I started
from scratch on a new project and made the same program (cut and paste some code that seems OK).
In that version of the program the Debug compile works perfectly, but the Release version does not. In the
Release version of the second try, when I click on the column header, the headers actually disappear,
the column widths are screwed up (very wide) and the line items are all jumbled and some parts missing.
The "sort" seems to work OK in all versions, so I don't think that is the snag. It seems to be in the
"getting" and "setting" of the CHeaderCtrl items.
I know this is pretty vague, but any ideas? What the heck is going on? More to the point, what can
I do to figure it out and fix it?
Thanks for any suggestions. David.
|
|
|
|