|
There is nothing wrong with that method and in fact, that is the most simple way possible.
|
|
|
|
|
Mr Newcomer's article does this. He tries to create a mutex, and if it already exists, an instance of the program is already running. He just added a feature where the instance that is running is brought to the top and made the active window, saving the user from having to look for it.
---
Multitasking: Screwing up several things at once.
|
|
|
|
|
Infact you can replace the mutex name with a GUID.
Cheers
Kannan
|
|
|
|
|
Has anyone had any luck with this function? I'm trying to make a video by taking the video stream from an existing AVI, which works fine, and calling AVIMakeFileFromStreams using just that stream. The file is created by AVIFileOpen, except i can't play the file in my viewer or in Media Player, since it didn't make it correctly from the stream.
Any help is greatly appreciated, I didn't find any sample code online.
thanks,
Jake
|
|
|
|
|
I've been working on a small multi-threaded app for a while, and I've ironed out all of the bugs except for one. I'm not very proficient with threading in general, so for all I know, this could be a simple problem.
The app actually consists of two worker threads and the main GUI thread, but the problem lies within the GUI thread. As a quick note, the worker threads do not touch the GUI thread, so I know that's not what is causing the trouble. I have a simple Browse button that brings up a CFileDialog to allow the user to pick an input file, which works as it is supposed to. There are several other fields of data that the user must enter (basically data that is relevant to the file and how it will be processed). After entering the data, the user then pushes another button that will add this info to a CListCtrl and an internal list that is used for processing the file(s) later.
I also have an 'Options' button that brings up another dialog where the user sets various program parameters. Here is where the problem arises:
If the user clicks the 'Options' button before they save information to the list of files to be processed, the dialog comes up without any problems. So long as no information has been added to the CListCtrl, the 'Options' dialog works like it supposed to. As soon as any info is added to the CListCtrl, however, the program will lock upon the user clicking the 'Options' button.
I know from tracing through the code that the program locks upon the call
hWnd = ::CreateDialogIndirect(hInst, lpDialogTemplate, pParentWnd->GetSafeHwnd(), AfxDlgProc);
The above statement is part of DLGCORE.CPP, and is called upon trying to open the 'Options' dialog. Could someone please enlighten me as to what I am doing wrong? Any ideas would be appreciated.
--Dean
|
|
|
|
|
Try Debug|Break when application hangs. You should be able to have a look at the other threads' stacks - this information may be helpful.
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
The other threads have nothing to do with the GUI though. In fact, when the app hangs, the other (worker threads) haven't even been started.
--Dean
|
|
|
|
|
But what's on the stack when you Debug|Break? A call to ::CreateDialogIndirect or something else?
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
Funny -- this has been a bug for a very long time now, and now that I'm trying to reproduce it so I can see what's on the stack, everything works perfectly. You gotta love it...
|
|
|
|
|
Hi
I want to create an SDI-app with two splitter-windows.
It should look like this:
|--------------------|
| |
| |
| C(Rich)EditView |
| |
| |
|--------------------|
| CView |
|--------------------|
How can I realize it?`I already wrote some code, but unfortunately the MainFrame looks very weird and has some GUI-bugs. If someone could help me improve this code:
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
CRect cr;
GetClientRect( &cr );
if ( !m_mainSplitter.CreateStatic( this, 2, 1 ) )
{
MessageBox( "Fehler beim Erstellen der einzelnen Fenster!", "Fehler beim Initialisieren!",MB_OK | MB_ICONERROR );
return FALSE;
}
if ( !m_mainSplitter.CreateView( 0, 0, RUNTIME_CLASS(CMyAppView),CSize( cr.Width(), cr.Height()), pContext ) )
{
MessageBox( "Fehler beim Erstellen der einzelnen Fenster!", "Fehler beim Initialisieren!",MB_OK | MB_ICONERROR );
return FALSE;
}
if ( !m_mainSplitter.CreateView( 1, 0, RUNTIME_CLASS(CDebugView),CSize( cr.Width(), cr.Height()), pContext ) )
{
MessageBox( "Fehler beim Erstellen der einzelnen Fenster!", "Fehler beim Initialisieren!",MB_OK | MB_ICONERROR );
return FALSE;
}
m_initSplitters = TRUE;
return CFrameWnd::OnCreateClient(lpcs, pContext);
}
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
CFrameWnd::OnSize(nType, cx, cy);
CRect cr;
if ( m_initSplitters && nType != SIZE_MINIMIZED )
{
m_mainSplitter.GetClientRect( &cr );
m_mainSplitter.SetRowInfo( 0, cy / 2, 0 );
m_mainSplitter.SetRowInfo( 1, cy / 2, 0 );
m_mainSplitter.SetColumnInfo( 0, cy, 0 );
m_mainSplitter.RecalcLayout();
}
}
thanks in advance
|
|
|
|
|
I already wrote some code, but unfortunately the MainFrame looks very weird and has some GUI-bugs
What are these GUI-bugs?
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
You shouldn't call CFrameWnd::OnCreateClient in CMainFrame::OnCreateClient. Just return TRUE. CFrameWnd::OnCreateClient creates additional view using pContext. Your application has 3 (not 2) views and this is where problems begin.
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
I have a list box that I am using to display a status log. When the visible list box fills up, I would like the list box to scroll down with each new entry. How can I accomplish this?
- John
|
|
|
|
|
I use this
CListBox::SetTopIndex()
Cheers!!!!
Carlos Antollini.
|
|
|
|
|
Hi
I'm just writing an SDI-application with Splitter-Windows.
I have created the splitter-windows in the function BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
Now I need to set the Row-and col-information in the OnSize-function.
But there the application crashes:
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
CFrameWnd::OnSize(nType, cx, cy);
CRect cr;
if ( m_initSplitters && nType != SIZE_MINIMIZED )
{
m_mainSplitter.SetRowInfo( 0, cy, 0 );
m_mainSplitter.SetRowInfo( 1, cy, 0 );
m_mainSplitter.SetColumnInfo( 0, cx, 0 );
m_mainSplitter.SetColumnInfo( 1, cr.Height() - 150, 0 );
m_mainSplitter.RecalcLayout();
}
}
it crashes in file winsplit.cpp at this point:
void CSplitterWnd::SetRowInfo(int row, int cyIdeal, int cyMin)
{
ASSERT_VALID(this);
ASSERT(row >= 0 && row < m_nMaxRows);
ASSERT(cyIdeal >= 0);
ASSERT(cyMin >= 0);
->>>>>> m_pRowInfo[row].nIdealSize = cyIdeal; <------- here's the crash
m_pRowInfo[row].nMinSize = cyMin;
}
can someone explain me what's going on here?
thanks in advance
|
|
|
|
|
Hi,
check the splitter window handle value before change the size of splitter window,
you can try the following way
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
CFrameWnd::OnSize(nType, cx, cy);
//i added only the following condition
if ( m_initSplitter.m_hWnd != NULL )
{
CRect cr;
if ( m_initSplitters && nType != SIZE_MINIMIZED )
{
m_mainSplitter.SetRowInfo( 0, cy, 0 );
m_mainSplitter.SetRowInfo( 1, cy, 0 );
m_mainSplitter.SetColumnInfo( 0, cx, 0 );
m_mainSplitter.SetColumnInfo( 1, cr.Height() - 150, 0 );
m_mainSplitter.RecalcLayout();
}
}
}
bye,
J.Mahesh
|
|
|
|
|
Hi,
check the splitter window handle value before change the size of splitter window,
you can try the following way
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
CFrameWnd::OnSize(nType, cx, cy);
//i added only the following condition
if ( m_initSplitter.m_hWnd != NULL )
{
CRect cr;
if ( m_initSplitters && nType != SIZE_MINIMIZED )
{
m_mainSplitter.SetRowInfo( 0, cy, 0 );
m_mainSplitter.SetRowInfo( 1, cy, 0 );
m_mainSplitter.SetColumnInfo( 0, cx, 0 );
m_mainSplitter.SetColumnInfo( 1, cr.Height() - 150, 0 );
m_mainSplitter.RecalcLayout();
}
}
}
bye,
J.Mahesh
|
|
|
|
|
Thanks!
I just forgot to tell the app that all windows have been created sucsessfully (i.e. I forgot to set the variable m_initSplitters to TRUE)
works well, but I still have problems with the app (view thread above "CSplitterWnd")
|
|
|
|
|
How can I intercept the 'Enter' key before it reach a button.
I tried WM_CHAR in the PreTranslate function, but this works only for alphanumerics and not the 'Enter' key.
Thank You
LP
|
|
|
|
|
Try the IDOK message.. you are using a dialog, aren't you?
You could also try the WM_KEYDOWN message.
|
|
|
|
|
Subject How to send message WM_RBUTTONDOWN?
Category Beginner
Posted by tag on 8/7/01 at 11:06 am
Rating not rated
I want to send the WM_RBUTTONDOWN from a console program to a MFC application window. I did it like this:
::SendMessage(destHwnd, WM_RBUTTONDOWN, 0, MAKELPARAM(point.x,point.y))
But, the MFC application window can't get the msg at all. What's wrong?
PostMessage desn't work also.
Thank you,
tag
|
|
|
|
|
The obvious problem could be a wrong handle.
Use Spy++ and debugger to see if your handle is ok.
LP
|
|
|
|
|
Have you used FindWindow to get the proper destHwnd?
|
|
|
|
|
I have defined inside the DLL a common global variable to store the time (time_t). Well, inside the hook CBTProc i read always a value of 0 from the variable and out of the DLL i can read it correctly (with a function that return it).
What's wrong?
Please help me and thanks in advance.
|
|
|
|
|
Probably you forgot to place global variable into a shared data section. BTW: how are you accessing this variable 'outside the DLL'?
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|