|
Oh, that all was based on Iain Clarke arrogant assumptions!
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
|
|
|
|
|
|
Hi,
I have a tricky issue here:
A MFC dialog based App calls a Batch script. This batch script again calls a SSH tool to login to a remote PC. This is to enable FTP service on WinNT remote PC. This is done multiple times in my MFC app.
SSH login take approximately 30 seconds and somehow I can not make the control waut there until the SSL login goes thru.
I have used the following code to run the Sample BAT file:
<br />
-TestFTP.bat-<br />
ssh.exe -pw <password> <uname>@<ipaddress> <br />
net start ftp<br />
exit<br />
</ipaddress></uname></password>
In MFC I use WaitForSingleObject to wait for completion of TestFTP.bat:
SHELLEXECUTEINFO ShExecInfo = {0}; <br />
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); <br />
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS; <br />
ShExecInfo.hwnd = NULL; <br />
ShExecInfo.lpVerb = NULL; <br />
ShExecInfo.lpFile = "TestFTP.bat"; <br />
ShExecInfo.lpParameters = ""; <br />
ShExecInfo.lpDirectory = NULL; <br />
ShExecInfo.nShow = SW_HIDE; <br />
ShExecInfo.hInstApp = NULL; <br />
ShellExecuteEx(&ShExecInfo); <br />
WaitForSingleObject(ShExecInfo.hProcess,INFINITE); <br />
However, WaitForSingleObject returns immediately and Not sure whats wrong here. How to wait till the batch completes? Any help would be great!
Thanks
Vikas
|
|
|
|
|
Do you know WaitForSingleObject [^] function returns a value? Are you aware that you should check that value?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
|
|
|
|
|
May be it seems to you, while debugging it might completes.
Try this,
-TestFTP.bat-
ssh.exe -pw @
net start ftp
pause
and check whether WaitForSingleObject returns immediately.
And also, check your batch file executes correctly,
ShExecInfo.nShow = SW_SHOW; // you can change it later.
ssh.exe -pw @ // if ssh is not installed it returns error. similarly.
|
|
|
|
|
At one point in time, batch files were processed one line at a time, with an open and close each time. So technically, the batch file did complete, but there was no distinction between the first line completing vs. the whole thing being complete. One other thing to try is CreateProcess() instead of ShellExecuteEx() .
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
Hi,
how to edit font settings for a tab head in tabsheets in MFC..
(&)
Is it possible to disable / remove ok/cancel/apply/help buttons from tab sheets???
Gita
|
|
|
|
|
Gita.Bairavi wrote: how to edit font settings for a tab head in tabsheets in MFC..
SetFont()[^]
Gita.Bairavi wrote: Is it possible to disable / remove ok/cancel/apply/help buttons from tab sheets???
You can use EnableWindow() to disable or enable those buttons.
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
Codeproject.com: Visual C++ MVP
|
|
|
|
|
You can also:
CWnd *pWnd = NULL;<br />
pWnd = GetDlgItem(IDCANCEL);<br />
if (pWnd)<br />
{<br />
pWnd->ShowWindow(SW_HIDE);<br />
}
It is easy to find out the other ID's from the other buttons...
You can use also : m_psh.dwFlags &= ~PSH_HASHELP; (in the property sheet).
And in each property page... :
m_ppSysSig.m_psp.dwFlags |= PSP_USETITLE;<br />
m_ppSysSig.m_psp.dwFlags &= ~PSP_HASHELP;<br />
m_ppSysSig.m_psp.pszTitle = "SYSSIG";<br />
AddPage(&m_ppSysSig);
Hope this helps...
|
|
|
|
|
in VC++ 6
when i run the program all controls are Visible and functions properly........
but the background of the window appears transparent .....As the program compiles without any error
AbidBhat
|
|
|
|
|
bhat wrote: in VC++ 6
when i run the program all controls are Visible and functions properly........
but the background of the window appears transparent .....As the program compiles without any error
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
Codeproject.com: Visual C++ MVP
|
|
|
|
|
bhat wrote: when i run the program all controls are Visible and functions properly........
but the background of the window appears transparent .....As the program compiles without any error
Often programs compiled without errors don't behave as expected.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
|
|
|
|
|
|
Try to reformulate the description of your problem since it isn't that clear.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
|
|
|
|
|
bhat wrote: hey Tell me how to come out of this
It's like Hotel California. You can check out any time you like. But you can never leave.
*Rajesh starts playing his guitar, having a fun time fishing*
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
Codeproject.com: Visual C++ MVP
|
|
|
|
|
"On a dark desert highway, cool wind in my hair..."
Damn, I did have hair once.
Back when that album came out.
|
|
|
|
|
Did you coded for this,
May be WS_EX_TRANSPARENT style set to the window.
May be WM_ERASEBKGND and / or WM_PAINT handled but not doing anything or not passing to default window procedure.
|
|
|
|
|
Hi all,
I have created a Directshow filter for video playback. It runs fine in GraphEdit or by double clicking the video file but when I select the thumbnail view for the video file in explorer, explorer crashes giving the ASSERT error
Executable: explorer.exe Pid 328 Tid fc8. Module myFilter.ax, 5 objects left active! At line 317 of C:\DXSDK\Samples\C++\DirectShow\BaseClasses\dllentry.cpp
Continue? (Cancel to debug)
Can anybody suggest how this bug can be removed?
Thanks in Advance.
Regards,
Tahir
|
|
|
|
|
Did you try to use your debugger ?
|
|
|
|
|
mTahir wrote: explorer.exe Pid 328 Tid fc8. Module myFilter.ax, 5 objects left active! At line 317 of
It occurs if you acquired any interface and not releasing it, when the filter is about to destruct. The interface acquired in your filter may be other filters which might acquired other interfaces and your assert message shows 5 interfaces not released.
I think you must be able to get this error in graphedit also, stress test for different scenarios, like pause the graph and close the graphedit, insert and remove filters, close graphedit while running graph. The thumbnail might be in different state which you never tried in graphedit.
log the reference count of the interfaces while you acquire and release and check whether it matches. for all your pins and filters override the
"STDMETHODIMP_(ULONG) NonDelegatingAddRef();"
"STDMETHODIMP_(ULONG) NonDelegatingRelease();" so that you can log easily.
|
|
|
|
|
Raj thanks for your reply.
I will look into it. I will try 'log the reference count ' thing and will come back with the results soon.
Regards,
|
|
|
|
|
Below is the code snippet I wrote for displaying pixel values onto the screen in MFC. The pixel values are stored in buffer disp_frame. But nothing appears on screen. Could anyone debug this code.
void CBluetooth_decoderDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
int p=0,i=0,j=0,q=0;
// extern int disp_frame[50][144][176];
///////////////////////
BITMAPINFOHEADER bmi;
BITMAPINFO bm;
RGBQUAD rgbarray[256];
bmi.biSize = sizeof(BITMAPINFOHEADER);
bmi.biWidth = 176;
bmi.biHeight = 144;
bmi.biPlanes = 1;
bmi.biBitCount = 8;
bmi.biCompression = BI_RGB;
bmi.biSizeImage = 0;
bmi.biXPelsPerMeter = 0;
bmi.biYPelsPerMeter = 0;
bmi.biClrUsed = 0;
bmi.biClrImportant = 0;
bm.bmiHeader = bmi;
for (int color_index = 0; color_index < 256; color_index++)
{
rgbarray[color_index].rgbBlue = i;
rgbarray[color_index].rgbGreen = i;
rgbarray[color_index].rgbRed = i;
rgbarray[color_index].rgbReserved = 0;
}
bm.bmiColors[1] = rgbarray[0];
/////////////////////
CRect rcClient;
GetClientRect(rcClient); // See Note 1
rcClient.right=176;
rcClient.bottom=144;
CDC MemDC,*pDC;
CBitmap MemBitmap,*drawmem;
pDC = this->GetDC(); // Get Current DC
MemDC.CreateCompatibleDC(pDC);
CreateDIBSection(MemDC,bm,DIB_RGB_COLORS,disp_frame,NULL,0);
CBitmap *pOldBitmap =MemDC.SelectObject(&MemBitmap);
pDC->BitBlt(150,100,176,144,&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(pOldBitmap);
ReleaseDC(pDC);
}
|
|
|
|
|
Have a look at CreateDIBSection documentation [^]. It states the 5th parameter (a pointer to a pointer) is an [out] one. It means you have to pass the address of a pointer and, on return, that pointer will contain the address of the allocated DIB section buffer, then you have to change the bit values of such buffer, according to disp_frame values, before selecting it into device context.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
|
|
|
|
|
rtant = 0;
bm.bmiHeader = bmi;
for (int color_index = 0; color_index < 256; color_index++)
{
rgbarray[color_index].rgbBlue = i;
rgbarray[color_index].rgbGreen = i;
rgbarray[color_index].rgbRed = i;
rgbarray[color_index].rgbReserved = 0;
}
bm.bmiColors[1] = rgbarray[0];
/////////////////////
CRect rcClient;
GetClientRect(rcClient); // See Note 1
rcClient.right=176;
rcClient.bottom=144;
CDC MemDC,*pDC;
CBitmap MemBitmap,*drawmem;
pDC = this->GetDC(); // Get Current DC
MemDC.CreateCompatibleDC(pDC);
CreateDIBSection(MemDC,bm,DIB_RGB_COLORS,disp_frame,NULL,0);
CBitmap *pOldBitmap =MemDC.SelectObject(&MemBitmap);
pDC->BitBlt(150,100,176,144,&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(pOldBitmap);
ReleaseDC(pDC);
}
This was the piece of code which was posted previously. But the CreateDIBSection code
CreateDIBSection(MemDC,bm,DIB_RGB_COLORS,disp_frame,NULL,0); was having MemDC is a CDC type. But actually it should be HDC type. So I have rewritten the code as
HDC hDC;
hDC = CreateDC("DISPLAY",NULL,NULL,NULL);
HDC memDC = CreateCompatibleDC(hDC);
CreateDIBSection(hDC,bitmap,DIB_PAL_COLORS,ppbits,NULL,0);
HBITMAP memBM = CreateCompatibleBitmap(hDC,176,144);
SelectObject(memDC,memBM);
BitBlt(memDC,150,100,176,144,hDC,0,0,SRCCOPY);
But CreateDIBSection is creating exception. What could be the reason. Basically I could not get the difference between CDC and HDC. Could anyone give a clear solution to my problem. I am actually trying to display a grayscale image which exists as R=G=B values in memory.
|
|
|
|
|
Please surround code snippets with <pre> tags.
(1) What error message are you receiving?
(2) how did you define ppbits ?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
|
|
|
|
|