|
Hi Maxwell,
This class is also very useful. You have so many good materials.
regards,
George
|
|
|
|
|
I am looking for Win32 support.
and i am trying to use GetOpenFileName.
The my code snippet is:
OPENFILENAME ofn;
char szFile[260];
HWND hwnd;
HANDLE hf;
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hwnd;
ofn.lpstrFile = (LPWSTR)szFile;
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = (LPCWSTR)"All\0*.*\0Text\0*.TXT\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
DWORD err;
if (GetSaveFileName (&ofn)==TRUE)
{
hf = CreateFile(ofn.lpstrFile, GENERIC_READ,0,
(LPSECURITY_ATTRIBUTES) NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,(HANDLE) NULL);
}
else
err = CommDlgExtendedError();
But i am returned with err = 0xFFFF .i.e.
CDERR_DIALOGFAILURE: The dialog box could not be created. The common dialog box function's call to the DialogBox function failed. For example, this error occurs if the common dialog box call specifies an invalid window handle.
Please help.
|
|
|
|
|
try this
<br />
static char File [260];<br />
OPENFILENAME m_ofn;<br />
memset(&m_ofn, 0, sizeof(m_ofn));<br />
m_ofn.lStructSize = sizeof(OPENFILENAME);<br />
m_ofn.hwndOwner = m_hWnd;<br />
m_ofn.hInstance = AfxGetApp()->m_hInstance;<br />
m_ofn.lpstrFilter = "All files(*.*)\0*.*\0";<br />
m_ofn.lpstrCustomFilter = NULL;<br />
m_ofn.nMaxCustFilter = 0;<br />
m_ofn.nFilterIndex = 0;<br />
m_ofn.lpstrFile = File ;<br />
<br />
m_ofn.nMaxFile = sizeof(File );<br />
m_ofn.lpstrFileTitle = 0;<br />
m_ofn.nMaxFileTitle = 0;<br />
m_ofn.lpstrInitialDir = NULL;<br />
<br />
m_ofn.lpstrTitle = "Save a File";<br />
m_ofn.nFileOffset = 0;<br />
m_ofn.nFileExtension = 0;<br />
m_ofn.lpstrDefExt = NULL;<br />
m_ofn.lCustData = 0;<br />
m_ofn.lpfnHook = NULL;<br />
m_ofn.lpTemplateName = NULL;<br />
<br />
m_ofn.Flags= OFN_HIDEREADONLY|OFN_EXPLORER |OFN_ENABLEHOOK ;<br />
<br />
GetSaveFileName(&m_ofn);<br />
<br />
whitesky
|
|
|
|
|
thanks whitesky....
it does work, with minor changes....
m_ofn.hInstance = AfxGetApp()->m_hInstance;
is not working
m_ofn.lpstrTitle = (LPCWSTR)L"Save a File";
m_ofn.lpstrFile = (LPWSTR)File ;
|
|
|
|
|
In my opinion, possible causes are:
1. Invalid value assigned to hwndOwner member in "ofn.hwndOwner = hwnd ", since hwnd was not initialized before. You must assign a valid window handle, or NULL .
2. Cast expressions like "(LPWSTR)szFile " is incorrect, since szFile is not an Unicode string. You probably did this because your application is compiled in Unicode mode. The recomended way is:
TCHAR szFile[260];
...
ofn.lpstrFile = szFile;
Now it should compile in both ANSI and Unicode mode. (You may need to include TCHAR.h to your file).
3. The assignment ofn.lpstrFilter = (LPCWSTR)"All\0*.*\0Text\0*.TXT\0"; is incorect and must look like this:
ofn.lpstrFilter = _T("All\0*.*\0Text\0*.TXT\0");
which should work in both ANSI and Unicode mode.
4. According to documentation, GetSaveFileName returns non-zero in case of success, which theoretically can be different from TRUE constant. I think it is better to compare with FALSE (zero):
if(GetSaveFileName (&ofn) != FALSE) ...
or simply
if(GetSaveFileName (&ofn)) ...
Hope this will help.
|
|
|
|
|
Want to display the contents (struct contents) in a Notepad when a user clicks a button. The contents of the struct should be transferred to the Notepad without saving in a temp location.
Any clues please
Thanks
Raji
|
|
|
|
|
Use ShellExecute() :
ShellExecute(NULL,NULL,"notepad","c:\\abc.txt","",1);
The above line shows the content of a file abc in notepad.
Somethings seem HARD to do, until we know how to do them.
_AnShUmAn_
|
|
|
|
|
Thanks. But i don't want to save the file. But need to show the contents of the struct result in a notepad.
Thanks
Raji
|
|
|
|
|
RajiRaghu wrote: Thanks. But i don't want to save the file. But need to show the contents of the struct result in a notepad.
Is Notepad is Displayed or you have to display it before displaying the result!
"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
Support CRY- Child Relief and You
|
|
|
|
|
Notepad is not displayed. Have to display Notepad along with the contents.
Thanks
Raji
|
|
|
|
|
RajiRaghu wrote: Notepad is not displayed. Have to display Notepad along with the contents.
this code will help!
::ShellExecute(NULL,"open","notepad.exe",NULL,NULL,SW_SHOWNORMAL);
Sleep(120);
HWND hNoteWnd=::FindWindow("Notepad",NULL);
char *MY="alok";
if(hNoteWnd)
{
HWND hEditWnd=FindWindowEx(hNoteWnd,NULL,"Edit",NULL);
if(hEditWnd)
{
::SendMessage(hEditWnd,WM_SETTEXT,0,(long)MY);
}
}
"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
Support CRY- Child Re
|
|
|
|
|
Hi ,
Check this out :-
Taken From Jeff Prosise:-
Sometimes the need arises to launch a process and delay just long enough to make sure the process is started and responding to user input. If process A launches process B and process B creates a window, for example, and process A wants to send that window a message, process A might have to wait for a moment after ::CreateProcess returns to give process B time to create a window and begin processing messages. This problem is easily solved with the Win32 ::WaitForInputIdle function:
STARTUPINFO si;
::ZeroMemory (&si, sizeof (STARTUPINFO));
si.cb = sizeof (STARTUPINFO);
PROCESS_INFORMATION pi;
if (::CreateProcess (NULL, _T ("C:\\Windows\\Notepad"), NULL,
NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi)) {
::CloseHandle (pi.hThread);
::WaitForInputIdle (pi.hProcess, INFINITE);
// Get B's window handle and send or post a message.
::CloseHandle (pi.hProcess);
}
::WaitForInputIdle suspends the current process until the specified process begins processing messages and empties its message queue. I didn't show the code to find the window handle because there isn't a simple MFC or API function you can call to convert a process handle into a window handle. Instead, you must use ::EnumWindows, ::FindWindow, or a related function to search for the window based on some known characteristic of the owning process.
Regards,
FarPointer
|
|
|
|
|
::ShellExecute(NULL,"open","notepad.exe",NULL,NULL,SW_SHOWNORMAL);
Sleep(120);
HWND hNoteWnd=::FindWindow("Notepad",NULL);
char *MY="Check";
if(hNoteWnd)
{
CWnd* hEditWnd=FindWindowEx(hNoteWnd,NULL,"Edit",NULL);
if(hEditWnd)
{
::SendMessage((HWND)hEditWnd,WM_SETTEXT,0,(long)MY);
}
}
Used the above code. Getting Notepad opened without the contents. Any clues please?
Thanks
Raji
|
|
|
|
|
RajiRaghu wrote: ::ShellExecute(NULL,"open","notepad.exe",NULL,NULL,SW_SHOWNORMAL);
Sleep(120);
Instead of this code, use this code suggested by FarPointer
STARTUPINFO si;
::ZeroMemory (&si, sizeof (STARTUPINFO));
si.cb = sizeof (STARTUPINFO);
PROCESS_INFORMATION pi;
if (::CreateProcess (NULL, _T ("C:\\Windows\\Notepad"), NULL,
NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, π)) {
::CloseHandle (pi.hThread);
::WaitForInputIdle (pi.hProcess, INFINITE);
::CloseHandle (pi.hProcess);
}
"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
Support CRY- Child Relief and You
|
|
|
|
|
try this
<br />
::SendMessage((HWND)hEditWnd,WM_SETTEXT,0,(long)MY);<br />
::SendMessage(hEditWnd->m_hWnd,WM_SETTEXT,0,(LPARAM)MY);<br />
<br />
::ShellExecute(NULL,_T("open"),_T("notepad.exe"),NULL,NULL,SW_SHOWNORMAL);<br />
Sleep(120);<br />
<br />
HWND hNoteWnd=::FindWindow(_T("Notepad"),NULL);<br />
LPCTSTR MY;<br />
MY=_T("Check");<br />
<br />
CWnd* hEditWnd=FindWindowEx(hNoteWnd,NULL,_T("Edit"),NULL);<br />
<br />
::SendMessage(hEditWnd->m_hWnd,WM_SETTEXT,0,(LPARAM)MY);<br /> and i test it work
whitesky
|
|
|
|
|
It works! Thanks to you all
Thanks
Raji
|
|
|
|
|
// Let us suppose the structure is :
struct abc{<br />
char name[255];<br />
};
//now in the function OnXYZClicked() //or whatever you have
abc q;<br />
strcpy(q.name,"abc");<br />
ShellExecute(NULL,"open","notepad",q.name,"",1);<br />
Sleep(500);
HWND hwnd=::FindWindow(NULL,"abc.txt - notepad");<br />
POINT pt={100,100};<br />
HWND edit=::ChildWindowFromPoint (hwnd,pt);<br />
::SendMessage (edit,WM_SETTEXT,(WPARAM)"hello",(LPARAM)q.name);<br />
// Now when you run this for the first time no text is seen instead you are prompted to create a new file?
//The next time you run your application the file pops up with the text.
This is only a crude way of doing what you want to . You can find a better method but this is what clicked me right now.
Does this fit your needs?
Somethings seem HARD to do, until we know how to do them.
_AnShUmAn_
|
|
|
|
|
Hi Gurus,
Does anyone know how windows eventviewer is implementing the export functionality. That is we can export the event list as tab delimited txt format or comma delimited csv file format. I didnt find any suitable functions for this in windows event logging api. The issue is we have to develop a custome eventviewer and these funtionalities has to be included. Any suggestions are most welcome.
Thanks
C++beginer
|
|
|
|
|
No function is there. I think EV is list control and MS provided functions to get value from list and record to file
Anil
|
|
|
|
|
So what your are saying is that the records in the event log is loaded to a list control (pardon me, i am not familiar with vc jargon) and from the list control its saved to a specific format. That is log entries are not directly exported?
C++beginer
|
|
|
|
|
There is an already existing API to read the even log records. You can use that API to read the event log records and export them into whatever data format is of your choosing. See OpenEventLog and ReadEventLog for starters.
I've seen better runs in my shorts! - Patches O'Houlihan
|
|
|
|
|
ahoy! I'm rather new to OOP and C++ programming in general, though i know some basics (keywords, some bits about classes, include files, and pointers)
recently ive begun to notice that C++ isnt just C++, but there seems to be different types of C++.
MFC for example, what is it? why is it so significant? is it just a library?
.NET, same question.
why would i want to use them to build my simple projects?
as of yet i'm only learning C++ for fun, though i may persue a career in programming in the near future (given post-secondary results)
any help to understand the concepts/point of MFC and .NET would be greatly appreciated. until then i just dont see why :/ what do they do? how do you use them? will any random compiler work with .net/mfc? are .net/mfc the same types of things?
I got a major case of brainsplode the other day trying to understand on my own. it doesnt work out ._.
|
|
|
|
|
Hi,
MFC is an application framework for writing Microsoft C/C++ and Visual C++ applications.
It increases the ease of use and definitely the speed with which an application is developed because you don't need to start from scratch each time.
If you have an application where you have to draw a window and just add a few buttons with background images and then perform some other complex GDI operations it would become tedious and will take some time. By using classes in MFC you can do it very easily and that's the whole point.
(event handlers etc (HANDCODED) just to make things sound complicated)
Somethings seem HARD to do, until we know how to do them.
_AnShUmAn_
-- modified at 1:33 Monday 5th June, 2006
|
|
|
|
|
Thats right. MFC makes life really simple and fun too.
I too learnt VC++ on my own. And I knew only C before I started.
If you are really interested in learning, I suggest you buy a good book (there are plenty out there) and start from page 1... and keep at it. Once the initial barrier is broken, it becomes a smooth ride.
All the best.
Fortitudine Vinsinues!
(By endurance we conquer.)
|
|
|
|
|
Is it a suggestion for me?
Thanks for this one . I thought I didn't need this.
Somethings seem HARD to do, until we know how to do them.
_AnShUmAn_
|
|
|
|
|