|
Whack! Whack! Whack! Whack! Whack! Whack! Whack! Whack! Whack! Whack!
You know what that sound is? It's the sound of me hitting my self in the F^&*%$^%$ head with a large board...
You would think that the compilers now days would know that I actually meant zero
I wanted to use the counter as part of the string I was displaying and the devices I am listing here are enumerated starting at 1 so I just changed the start of the countr without even noticing that it was used to set the iItem.
Thanks for the fast response guys....
I am going to go look for a small rock to climb under now and hide
|
|
|
|
|
I feel kind of silly putting something so simple on here but I am working on an MFC app and am having a little bit of trouble making an Exit button. I tried using the OnClose command like the mainframe uses but it doesn't seem to be working. Any ideas?
|
|
|
|
|
Depends if your application is dialog based or not.
For example if is that the case you can use EndDialog(IDOK)
Carlos Antollini.
Sonork ID 100.10529 cantollini
|
|
|
|
|
Thanks, mine required that I pass an HWND object but that was fairly easy to get. Thanks again.
Gosh I feel like such a freshman.
|
|
|
|
|
AfxGetMainWnd()->PostMessage(WM_CLOSE);
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
The EndDialog thing didn't do exactly what I wanted it to do. It got rid of the dialog but it was still running in the background. This caused a nifty blue screen of death the next time I executed it. This works much better, can't believe I didn't think of it before. Thanks.
|
|
|
|
|
Is there an API that exists where I can specify a main file and then another file, where the second file just gets appended to the first file. I am looking for something like this.
CString m_MainFile = "C:\main.txt";
CString m_AnotherFile = "C:\another.txt";
AppendMyFiles(m_MainFile, m_AnotherFile);
In this case the contents of another.txt are appended to main.txt .
Thanks in advance.
Nick Parker
|
|
|
|
|
I don't believe.
Only need to open the twice files, the first in append mode, Read the second and write the first. in only four or five lines, you can do that...
Regards
Carlos Antollini.
Sonork ID 100.10529 cantollini
|
|
|
|
|
If you're defintely not in the mood of writing your own routine, as Carlos suggests, this might do:
CString m_MainFile = "C:\main.txt";
CString m_AnotherFile = "C:\another.txt";
CString m_command;
m_command.Format("copy %s +%s %s /Y",(LPCTSTR)m_MainFile,(LPCTSTR)m_AnotherFile,(LPCTSTR)m_MainFile);
system(m_command);
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
(Use CreateProcess instead of system for best results.)
|
|
|
|
|
Joaquín M López Muñoz wrote:
(Use CreateProcess instead of system for best results.)
It's like a little footnote.. I like it
Regards,
Brian Dela
|
|
|
|
|
Joaquín, I thinked that, but I dont like to depend of the os, to do something like the following...
command.Format("mk %s", mydir);
or
command.Format("del %s", myfile);
system(command);
Sounds like. Turn off the computer when you try to close the application....
I think that this is a good point for a pool....
When you have a os function that makes the work, you prefere to write several lines of code or make a system call?
Saludos....
Carlos Antollini.
Sonork ID 100.10529 cantollini
|
|
|
|
|
Yes, you're right my solution is seriously weak. I hope the guy was in the mood of writing the routine instead!
When you have a os function that makes the work, you prefere to write several lines of code or make a system call?
Write the code, unless it's unmanageable complex.
Saludos
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
If you want I'll write you a quick little AppendMyFiles("first_file", "second_file") function. Just email me if you want it.
Regards,
Brian Dela
|
|
|
|
|
Hi,
I'm looking for a database who's drivers come standard with Windows (Access??) (if possible) so I don't have to distribute them. I have an application that I'd like to start using with a database instead of files, but I don't want to distribute a bunch of drivers.
I've looked into MySQL and it seems that the redistrution package would be at least a couple of megs. MSDE is free, but it has the same size issues...
Do you have any recommendations? I'm familiar with using SQL, but not with redistributing databases and drivers and all that... it would be nice if I could just distribute a empty database with all the tables.
Also, I'm assuming I need to create an DSN entry in each users ODBC settings to run the new db, right? How would I go about creating these at runtime/install time?
Thanks,
Chris
|
|
|
|
|
dependes, you can use SQL Server, In that case you need to distribuit a database script, for install de server. In teh client workstation, you don't need to create a DSN entry. You can use a connection string without use a dsn. only specifying the database, servername, username, password, etc....
Regards....
Carlos Antollini.
Sonork ID 100.10529 cantollini
|
|
|
|
|
Windows XP comes with DAO 3.6 preinstalled, all others have nothing. You might try SQLite at http://www.hwaci.com/sw/sqlite/
I've used it before and it works quite well. No nice fancy wrappers tho (I have one internally,but it's certainly not ready for primetime).
Small footprint (200k roughly), most SQL syntax, single file, transactions.
Joel Lucsy (jjlucsy@ameritech.net)
|
|
|
|
|
Anyone ever have a problem where, for some reason, they can no longer add any subitems to a listview?
I have been banging my head on this for two days now. The code is as follows:
for (int i = 1; i <= num_vbpc_channels; i++)<br />
{<br />
lvi.mask = LVIF_IMAGE | LVIF_TEXT;<br />
strItem.Format(_T("Item %i"), i);<br />
<br />
lvi.iItem = i;<br />
lvi.iSubItem = 0;<br />
lvi.pszText = (LPTSTR)(LPCTSTR)(strItem);<br />
lvi.iImage = i%8;
m_cListCtrl.InsertItem(&lvi);<br />
<br />
strSubItem1.Format(_T("%s"), "Past");<br />
strSubItem2.Format(_T("%s"), "Past");<br />
<br />
lvi.iSubItem =1;<br />
lvi.pszText = (LPTSTR)(LPCTSTR)(strSubItem1);<br />
m_cListCtrl.SetItem(&lvi);<br />
<br />
lvi.iSubItem =2;<br />
lvi.pszText = (LPTSTR)(LPCTSTR)(strSubItem2);<br />
m_cListCtrl.SetItem(&lvi);<br />
<br />
}
Most of you will probably notice this code as it is (for the most part) a copy/paste from one of the MFC examples here. It works for a few runs then simply stops adding sub items. The first column of items always gets added...
UGH!
|
|
|
|
|
The code seems OK. Matt Weagle, in his article Using the List Control[^] shows some code that is almost identical to yours. You might try downloading the demo project he provides to try to determine the differences that are causing the strange behavior in your app.
PS: Your loop begins at 1 instead of 0. I don't think this is where the error stems from, but definitely you should begin at zero.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
Items start with number 0, not 1, I'm surprised you're seeing any subitems at all actually.
Zero-fill the LVITEM struct before setting its members. Not doing so can make the code fail in release mode. (Even though the mask field is there to indicate which members to use, the control still validates some of the other fields.)
Also, your (LPTSTR)(LPCTSTR) cast of a CString is incorrect code (although it happens to work here because the string isn't modified).
--Mike--
Just released - RightClick-Encrypt v1.4 - Adds fast & easy file encryption to Explorer
My really out-of-date homepage
Sonork-100.19012 Acid_Helm
|
|
|
|
|
Michael Dunn wrote:
Also, your (LPTSTR)(LPCTSTR) cast of a CString is incorrect code (although it happens to work here because the string isn't modified).
This is code directly out of an article from here. The article is cited in the message above.
Why is it incorrect? Actually, why is it used in the first place. You have to forgive me, I am an emerging C++/MFC programmer....
|
|
|
|
|
It is incorrect because CString provides a read-only array. If you want to modify the string, you have to use CString methods or overloaded operators like += .
Casting to LPCTSTR is fine, because CString provides that conversion itself, and still results in a read-only pointer. Casting that to a LPTSTR (which is not const ) gives you a read-write pointer to a read-only buffer. It compiles (because casts override type checking), and it even runs in your case, but that doesn't make the code correct.
The correct way to get a non-const pointer to the CString 's buffer is GetBuffer() .
--Mike--
Just released - RightClick-Encrypt v1.4 - Adds fast & easy file encryption to Explorer
My really out-of-date homepage
Sonork-100.19012 Acid_Helm
|
|
|
|
|
Also, your (LPTSTR)(LPCTSTR) cast of a CString is incorrect code
It is perfect code, no cast is superfluous. pszText is a non-const LPTSTR (because some CListCtrl methods use it as an out parameter).
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
Joaquín M López Muñoz wrote:
It is perfect code, no cast is superfluous.
Agreed. LVITEM::pszText is non-const, because structure is used in both LVM_SETITEM/LVM_GETITEM contexts.
Tomasz Sowinski -- http://www.shooltz.com
Free your mind and your ass will follow.
|
|
|
|
|
Joaquín M López Muñoz wrote:
It is perfect code
Hardly. See my post above.
Encouraging code like that will get people into trouble, because if they use that unsafe cast everywhere, it will eventually break, and they'll wonder "why isn't this working? I copied it from XYZ and it worked fine there".
I prefer to show people the correct code (CString::GetBuffer() ) so they learn the proper way to do things, instead of unsafe hacks that just happen to work in some situations.
--Mike--
Just released - RightClick-Encrypt v1.4 - Adds fast & easy file encryption to Explorer
My really out-of-date homepage
Sonork-100.19012 Acid_Helm
|
|
|
|