|
Dhiraj kumar Saini wrote: Its giving assertion related to size.
This is not a good way of getting help. You should be more precise and detailed when reporting errors.
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
[My articles]
|
|
|
|
|
Did you trace it ? and can you show your code?
|
|
|
|
|
Ya sure.
void CCaptureDesktopDlg::OnBnClickedButton1()
{
CString sFName;
CDC ScreenDC;
ScreenDC.Attach(::GetDC(NULL));
CBitmap Capture;
CSize Dimensions(GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN));
Capture.CreateCompatibleBitmap(&ScreenDC, Dimensions.cx, Dimensions.cy);
CDC MemDC;
MemDC.CreateCompatibleDC(&ScreenDC);
CBitmap *OldBitmap = MemDC.SelectObject(&Capture);
MemDC.BitBlt(0, 0, Dimensions.cx, Dimensions.cy, &ScreenDC, 0, 0, SRCCOPY);
CFileDialog fd( FALSE,
_T("BMP"),
NULL,
OFN_HIDEREADONLY &
OFN_OVERWRITEPROMPT,
NULL,
NULL);
fd.m_ofn.lpstrTitle = _T("Enter file name...");
fd.m_ofn.lpstrInitialDir = NULL;
fd.m_ofn.lpstrFilter = _T("BMP files (*.bmp)\000*.BMP\000");
if(fd.DoModal() == IDOK)
sFName = fd.GetPathName();
else
return;
HANDLE hDib = DDBToDIB( Capture, BI_RGB, NULL );
BOOL b = WriteDIB( sFName.GetBuffer(sFName.GetLength()) , hDib);
if(!b)
{
CString sMess = _T("Unable to write to file: \n");
sMess += sFName;
AfxMessageBox(sMess);
}
MemDC.SelectObject(Capture);
Capture.Detach();
MemDC.SelectObject(OldBitmap);
MemDC.DeleteDC();
::ReleaseDC(NULL, ScreenDC.Detach());
}
BOOL CCaptureDesktopDlg::WriteDIB( LPTSTR szFile, HANDLE hDIB)
{
BITMAPFILEHEADER hdr;
LPBITMAPINFOHEADER lpbi;
if (!hDIB)
return FALSE;
CFile file;
if( !file.Open( szFile, CFile::modeWrite|CFile::modeCreate) )
return FALSE;
lpbi = (LPBITMAPINFOHEADER)hDIB;
int nColors = 1 << lpbi->biBitCount;
if (nColors > 256)
nColors = 0;
hdr.bfType = ((WORD) ('M' << 8) | 'B');
hdr.bfSize = GlobalSize (hDIB) + sizeof( hdr );
hdr.bfReserved1 = 0;
hdr.bfReserved2 = 0;
hdr.bfOffBits = (lpbi->biBitCount>8)?(DWORD) (sizeof(hdr) +
lpbi->biSize):(DWORD) (sizeof( hdr ) +
lpbi->biSize + nColors * sizeof(RGBQUAD));
file.Write( &hdr, sizeof(hdr) );
file.Write( lpbi, GlobalSize(hDIB) );
return TRUE;
}
HANDLE CCaptureDesktopDlg::DDBToDIB( CBitmap& bitmap, DWORD dwCompression, CPalette* pPal )
{
BITMAP bm;
BITMAPINFOHEADER bi;
LPBITMAPINFOHEADER lpbi;
DWORD dwLen;
HANDLE hDIB;
HANDLE handle;
HDC hDC;
HPALETTE hPal;
ASSERT( bitmap.GetSafeHandle() );
if( dwCompression == BI_BITFIELDS )
return NULL;
hPal = (HPALETTE) pPal->GetSafeHandle();
if (hPal==NULL)
hPal = (HPALETTE) GetStockObject(DEFAULT_PALETTE);
bitmap.GetObject(sizeof(bm),(LPSTR)&bm);
bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biWidth = bm.bmWidth;
bi.biHeight = bm.bmHeight;
bi.biPlanes = 1;
bi.biBitCount = (short)(bm.bmPlanes * bm.bmBitsPixel);
bi.biCompression = dwCompression;
bi.biSizeImage = 0;
bi.biXPelsPerMeter = 0;
bi.biYPelsPerMeter = 0;
bi.biClrUsed = 0;
bi.biClrImportant = 0;
int nColors = (1 << bi.biBitCount);
if( nColors > 256 )
nColors = 0;
dwLen = bi.biSize + nColors * sizeof(RGBQUAD);
hDC = ::GetDC(NULL);
hPal = SelectPalette(hDC,hPal,FALSE);
RealizePalette(hDC);
hDIB = GlobalAlloc(GMEM_FIXED,dwLen);
if (!hDIB){
SelectPalette(hDC,hPal,FALSE);
::ReleaseDC(NULL,hDC);
return NULL;
}
|
|
|
|
|
Change to it:
if(fd.DoModal() == IDOK)
sFName = fd.GetPathName();
else
return;
CImage m2;
m2.Attach(Capture);
m2.Save(fd.GetPathName());
m2.Detach();
/*HANDLE hDib = DDBToDIB( Capture, BI_RGB, NULL );
BOOL b = WriteDIB( sFName.GetBuffer(sFName.GetLength()) , hDib);
if(!b)
{
CString sMess = _T("Unable to write to file: \n");
sMess += sFName;
AfxMessageBox(sMess);
} */
MemDC.SelectObject(Capture);
Capture.Detach();
|
|
|
|
|
|
You're welcome.
|
|
|
|
|
Hello,
I am not sure if this is the right forum to post this question as it relates more to ODBC & SQL, but I'm using C++ for this particular app, so here goes:
We are dynamically creating tables in a SQL 2005 database to store log data - a new table for each day. The problem is that it works fine for about 8 days to 2 weeks and then just creates the log table for the new day, but stops writing entries into the table. When I drop the oldest log table from the database it again starts logging into the newest table.
I've verified that autogrow is turned on for the database & that there is no size limit set. The funny thing is it does actually autogrow, but only to a certain point (there is more than enough hard drive space available). It is on various machines on various sites we are getting this behavior, so it can't be the SQL installation.
Has anyone dealt with something like this before?
Thanks in advance,
Riaan du Plessis
|
|
|
|
|
Is there any way to perform "TOUCH" (like TOUCH in UNIX) in windows, with out installing any tools?
From the site : "http://support.microsoft.com/kb/69581, I came to know that we can use COPY command to perform TOUCH like operation. and tried the below command. but I got the error "The system cannot find the file specified."
system ( "/COPY C:/Documents and Settings/ms56106/.tdm/CookieSession_Details.txt /B +");
So please help to fix this. Below are the different options I tried, but no clue.
1) I Have executed the below command from command prompt it works fine.
C:\Documents and Settings\ms56106\.tdm> COPY /B "C:/Documents and Settings/ms56106/.tdm/CookieSession_Details.txt" +
1 file(s) copied.
And if try the same from different folder it fails,
C:\Documents and Settings\ms56106> COPY /B "C:/Documents and Settings/ms56106/.tdm/CookieSession_Details.txt" +
The system cannot find the file specified.
0 file(s) copied.
What should I do to run for a different folder?
2) I want the same command to be used in C++ source, for this I tried the same with system(), but it is not working. Please correct me.
tem = C:/Documents and Settings/ms56106/.tdm/CookieSession_Details.txt
system ( "/COPY tem /B +");
Thanks,
Nandu
|
|
|
|
|
Shouldn't you be using \ instead of / in the paths? Like, "C:\Documents and Settings\ms56106..." instead of "C:/Documents and Settings/ms56106..."? Don't know if that makes any difference though...
> The problem with computers is that they do what you tell them to do and not what you want them to do. <
|
|
|
|
|
In system() function i am using "\". But this is not the problem.
|
|
|
|
|
All WIN32 API functions all accept both '/' and '\' (for NT at least), only some old command-line tools written for DOS might give you a problem there.
There is sufficient light for those who desire to see, and there is sufficient darkness for those of a contrary disposition.
Blaise Pascal
|
|
|
|
|
Hi All,
How can i pass , BYTE array parameter from VC++ 6.0 to OLE Server to SAFEARRAY Argument.
Regards
Vj
modified on Thursday, November 27, 2008 5:43 AM
|
|
|
|
|
How is the function you're calling declared?
[modified]
I mean the function in the server.
What kind of argument are you supposed to pass, a VARIANT that contains a SafeArray?
[/modified]
"It's supposed to be hard, otherwise anybody could do it!" - selfquote "High speed never compensates for wrong direction!" - unknown
|
|
|
|
|
Hi Roger,
Thanks for you reply ,
i have written a dll in C#.net and using RegAsm i created a .tlb file and i am using those functions in VC++6.0
C# function
void fun(byte[] input)
which is conveted to void fun(SAFEARRAY *input) in .tlb file .
now i dont know how to pass BYTE array to this fun function from VC++ 6.0
|
|
|
|
|
Ok, try the following:
- Create a SafeArray with a call to
::SafeArrayCreate() and set the VARTYPE parameter to VT_UI1 . - Get the data buffer of the SafeArray with a call to
::SafeArrayAccessData() and copy whatever data you'd like into the buffer. - Release the bufer when you're done with it with a call to
::SafeArrayUnaccessData() . - Call the
fun() function.
Look the SafeArray functions up for information on how to call and use them.
Begin at SafeArrayCreate[^].
"It's supposed to be hard, otherwise anybody could do it!" - selfquote "High speed never compensates for wrong direction!" - unknown
|
|
|
|
|
Roger,
Thank you so much for your time to reply it.
|
|
|
|
|
|
0x0f is not a NULL (that is 0x00 ).
Why did you expect 'i' (it looks like your device sends binary data)?
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
[My articles]
|
|
|
|
|
Why are you opening the serial port twice ? You can read and write from the same CSerial instance. BTW, from where is this CSerial class coming from ?
|
|
|
|
|
Hello,
I want to make a very small application capable of screen capturing.
Plaese help me with some example.
Thanks & Regards.
Dhiraj
|
|
|
|
|
You could try something like this, don't know if this actually works or not, didn't try it, but it can be a starting point for you, good luck:
CDC ScreenDC;
ScreenDC.Attach(::GetDC(NULL));
CBitmap Capture;
CSize Dimensions(GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN));
Capture.CreateCompatibleBitmap(&ScreenDC, Dimensions.cx, Dimensions.cy);
CDC MemDC;
MemDC.CreateCompatibleDC(&ScreenDC);
CBitmap *OldBitmap = MemDC.SelectObject(&Capture);
MemDC.BitBlt(0, 0, Dimensions.cx, Dimensions.cy, &ScreenDC, 0, 0, SRCCOPY);
MemDC.SelectObject(OldBitmap);
MemDC.DeleteDC();
::ReleaseDC(NULL, ScreenDC.Detach());
> The problem with computers is that they do what you tell them to do and not what you want them to do. <
|
|
|
|
|
|
Actually you know the logic. Maybe you don't know the realtive API.
What are your doubts about? Are you able to open and read the file?
Are you able to open and write to the serial port?
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
[My articles]
|
|
|
|
|
Hi,
I am using a 3rd party library(.h and .lib file) in my project.
I create one win32 app It is running successfully. But whe I tried to same library with SDI app It is giving LNK 2019 linking error although I have add the library name in project settings.
This library have 4 function but linking errors is coming for only 2.
If I comment these 2 function, program succeed .
Could you tell me what might me the problem, I am using vc.net 2003
|
|
|
|
|
See, for instance, this [^].
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
[My articles]
|
|
|
|
|