|
I guess you would like to call the base class handler.
Replace
CWnd::GetParent()->PostMessage(WM_KILLFOCUS,0,0);
With
CEdit::OnKillFocus();
Owner drawn
Jesus Loves
|
|
|
|
|
If it's true, this message will be sended to all CEdit, it's not possible to send it to exactly one object CEdit where i prefere ?
|
|
|
|
|
It won't goto all but only to the corresponding CNumeric's base class i.e. CEdit . It won't affect any other.
Owner drawn
Jesus Loves
|
|
|
|
|
csUserName and csComputerName contain valid entries. As soon as the instance of a Recordset Class is created, both are erased. Interesting: The CString Object csSqlStatement is not erased.
code sniplet:
CString csComputerName; // Speichert den Hostnamen des PCs
CString csUserName; // Speichert den UserNamen ( Windows)
CString csTimeNow; // Speichert die Uhrzeit
CString csConnectionString; // Verbindungs Daten
// Hole aktuelle Zeit
COleDateTime coTimeNow(COleDateTime::GetCurrentTime());
csTimeNow.Format( "%04d.%02d.%02d %02d:%02d:%02d", coTimeNow.GetYear(),
coTimeNow.GetMonth(),
coTimeNow.GetDay(),
coTimeNow.GetHour(),
coTimeNow.GetMinute(),
coTimeNow.GetSecond());
// Hole Hostnamen
DWORD dwHostLength = MAX_COMPUTERNAME_LENGTH + 1;
GetComputerName( csComputerName.GetBuffer( 0), &dwHostLength);
// Hole UserNamen
DWORD dwUserLength = UNLEN + 1;
GetUserName( csUserName.GetBuffer( 0), &dwUserLength);
// Instanz zur Datenbank aufbauen
csConnectionString = "DSN=ODR_CRM;UID=ODRGMBH;PWD=origin";
m_pDB = new CDatabase();
if( m_pDB->OpenEx(csConnectionString, CDatabase::noOdbcDialog))
{
// We´re connected to the database
}
else
{
// we have a problem connecting to the database
}
// !!!!!
// ! Next statement will erase csComputerName and csUserName !
// Access to Class Protokoll Table
m_pProtocol = new CProtokoll( m_pDB);
m_pProtocol->Open(); // ready to use
|
|
|
|
|
You have to pass a length to CString::GetBuffer() . By passing 0, you're allocating a buffer of 0 bytes to receive the computer name in, but telling GetComputerName() there is actually "dwHostLength" bytes. That's just asking for trouble. Similarly for the user name.
Also, when you call GetBuffer() , you have to call ReleaseBuffer() afterwards. Put in the call to ReleaseBuffer() straight after the call to GetComputerName() (and GetUserName() ).
Ryan "Punctuality is only a virtue for those who aren't smart enough to think of good excuses for being late" John Nichol "Point Of Impact"
|
|
|
|
|
Thanks a lot ! Changed it into:
// Hole Hostnamen
DWORD dwHostLength = MAX_COMPUTERNAME_LENGTH + 1;
GetComputerName( csComputerName.GetBuffer( MAX_COMPUTERNAME_LENGTH + 1), &dwHostLength);
csComputerName.ReleaseBuffer();
// Hole UserNamen
DWORD dwUserLength = UNLEN + 1;
GetUserName( csUserName.GetBuffer( UNLEN + 1), &dwUserLength);
csUserName.ReleaseBuffer();
and now it works.
|
|
|
|
|
Glad to help. BTW, you could just use dwHostLength and dwUserLength in the calls to GetBuffer() instead of computing the length twice. It's a bit safer if you change the calculation later and forget to change both places...
Ryan "Punctuality is only a virtue for those who aren't smart enough to think of good excuses for being late" John Nichol "Point Of Impact"
|
|
|
|
|
You´re absolutely right ! Thanks again.
|
|
|
|
|
Hello guys,
I want your help
I want to store different files (their data) into the data base how do I do that?
I have a table called Files with one blob field FileData, the table's structure is as follows
File(FileID IDENTITY(1,1), FileData text);
I am doing this application in MFC (VS 2005).
I accepted the file name from user, opened it using CFile::open method ,read data in it into TCHAR buff & inserted into DB as follows,
TCHAR szBuff[_MAX_PATH];
CString strSQL = _T("INSERT INTO Files(FileData) VALUES '%s'");
CString str = strSQL;
strSQL.Format(str,szBuff);
m_pDataBase->ExecuteSQL,strSQL);
tell me if I am doing mistake by taking a TCHAR array & what is the alternate way for it.
Remember that the files could be of any type & later stage I need to read the file data back.
I am new to MFC so please help me
Thanks in advance.
|
|
|
|
|
Hi
I have written an application which i am using to find the file opened through the Open/Save As dialog box. I am able to get only the file name which is opened. Is it possible to get the full path of the file from the file name. Is there anyway by which i can get the PIDL of a selected file in the dialog. Thanks in advance.
|
|
|
|
|
Yes, u can get the full path of the file by using this function. to display the full path:
SHGetPathFromIDList
This function converts an item identifier list to a file system path.
WINSHELLAPI BOOL WINAPI SHGetPathFromIDList(
LPCITEMIDLIST pidl,
LPSTR pszPath );
Parameters
pidl
[in] Pointer to an item identifier list that specifies a file or directory location relative to the root of the namespace (the desktop).
pszPath
[out] Pointer to a buffer to receive the file system path. This buffer must be at least MAX_PATH characters in size.
Return Values
TRUE indicates success. FALSE indicates failure.
Remarks
If the location specified by the pidl parameter is not part of the file system, this function will fail.
"If you change then change for the good."
|
|
|
|
|
Thanks . But that function will convert the PIDL to a path. My question is how to get the PIDL of a selected file.
|
|
|
|
|
Hi!!
Go through Q167834.
U will definitely get some hint from there.
"If you change then change for the good."
|
|
|
|
|
If you are using CFileDialog, call CFileDialog::GetPathName() for the complete path to the selected file. If you are not using MFC then OPENFILENAME::lpstrFile will contain the complete path to the file.
"You're obviously a superstar." - Christian Graus about me - 12 Feb '03
"Obviously ??? You're definitely a superstar!!!" - mYkel - 21 Jun '04
"There's not enough blatant self-congratulatory backslapping in the world today..." - HumblePie - 21 Jun '05
Within you lies the power for good - Use it!
|
|
|
|
|
That is true. But i want the file name from Open/Save as dialog of MS-Office or Notepad
|
|
|
|
|
how to assign signed char* data to cstring. any one help to me. thanks in advance.
Have A Nice Day!
Murali.M
|
|
|
|
|
CString str = _T("A signed char");
Owner drawn
Jesus Loves
|
|
|
|
|
thanks for your info. But I need info about signed char* variable to cstring.
Have A Nice Day!
Murali.M
|
|
|
|
|
That is what it is!
Owner drawn
Jesus Loves
|
|
|
|
|
Just assign it:
char *data = "This is some data";
CString str = data; If you're compiling for unicode, use the ATL A2T() macro.
Ryan "Punctuality is only a virtue for those who aren't smart enough to think of good excuses for being late" John Nichol "Point Of Impact"
|
|
|
|
|
Ryan Binns wrote: If you're compiling for unicode, use the ATL A2T() macro.
Little correction Sir, we can use TCHAR instead of char to avoid use of macro like A2T
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
|
|
|
|
|
ThatsAlok wrote: Little correction Sir, we can use TCHAR instead of char to avoid use of macro like A2T
I'm well aware of that, but his question specifically stated that he had a signed char , not a TCHAR .
Ryan "Punctuality is only a virtue for those who aren't smart enough to think of good excuses for being late" John Nichol "Point Of Impact"
|
|
|
|
|
HI,
Suppose I have following files
FileA.txt, FileB.txt, FileC.txt, FileD.txt, FileE.txt in the Directory C:\\Files\\
I want to create new files like FileA-FileB.txt merging the text of both files.
Then FileA-FileC.txt then another FileA-FileD.txt, then FileA-FileE.txt
I have created the above all the first file and its combination with other files
but the problem is in remaing
Means create the combinations of one file with all other.
After first one create FileB-FileC, then FileB-FileD , then FileB-FileE . after that skip second one and create the combination of 3rd and forth file. so on
When I ends up with first file combiantoin with other then I do
BOOL find = finder.FindFile("C:\\Files\\FileA.txt");
BOOL get = finder.FindNextFile(); // to get the second file again , to make its combinations
but here get give false;
Why not it finds again the next file to the fileA. and return true.
Thanks
Regards.
|
|
|
|
|
Hello!
Ur question is not very clear.
"If you change then change for the good."
|
|
|
|
|
FindNextFile() finds the next file that matches the pattern given in the call to FindFile() . Since you've only given one file name to FindFile() , FindNextFile() will always return false. To get all the text files, specify "C:\\Files\\*.txt" in the call to FindFile()
Ryan "Punctuality is only a virtue for those who aren't smart enough to think of good excuses for being late" John Nichol "Point Of Impact"
|
|
|
|