|
and I'm wondering because i see your reply now,
Is your problem solve?
|
|
|
|
|
I am very glad to solve my PrintPreview problem after two years.
God bless All code Project specialists
|
|
|
|
|
You get this error "Cannot open include file: 'PrintExtension.h':"
so you include this file and compiler cant find this file so it show this error to you
|
|
|
|
|
Excuse me, i was create CFormView instead of CDialog.
Now I coorect it, no compilation error but in execution, they ask me PrintExtension.dll. I don't see this file because i have only PrintExtensiond.lib(PrintExtensiond.dll).
|
|
|
|
|
Dear Sir,
Using PrintExtension library, how can I have print preview in Landscape ?
I learn My self
|
|
|
|
|
Using PrintExtension LIB to do printPreview, how can I Do preview in LANDSCAP orientation ?
|
|
|
|
|
I was unable to figure this out with http://www.codeproject.com/printing/printextension.asp[^]. This was a big problem for me because I need this functionality to work. So what I did was write everything into a dc in memory and then found some functionality to rotate the dc 90 degrees. After rotating it 90 degrees I was then showed the print preview. Even though the print preview was still showing portrait everything was rotated 90 degress so it was really landscape.
I know this seems pretty complicated and it was. Like I said I had to make this functionality work....and I did. It just took a lot of work.
Chris
|
|
|
|
|
Please Sir,
Would you like to send me also those codes. What you have write exactly.
|
|
|
|
|
After you are finished with you dc select in an empty CBitmap. This will return the current dc as a CBitmap. Like this....
CBitmap* bm = memDC.SelectObject(oldbm);
Now you can get the HBitmap out of the CBitmap like this.....
HBITMAP hbitmap = (HBITMAP)bm->m_hObject;
Now take the hbitmap and place it into the following function to rotate it...and there you go. You can put the hbitmap back into a CBitmap and then place it on the DC before you do a print preview.
bool HBITMAPRotate (HBITMAP& hBitmap,
float radians,
COLORREF clrBack,
CErrorHandler& eh)
{
CDC sourceDC;
CDC destDC;
if (sourceDC.CreateCompatibleDC(NULL) == FALSE)
{
eh.Initialize();
eh.Set(__FUNCTION__,__FILE__,__LINE__,EHTYPE_ERROR,LoadStringFromDLL(IDS_ERROR_CREATECOMPATIBLEDC).c_str());
return false;
}
if (destDC.CreateCompatibleDC(NULL) == FALSE)
{
eh.Initialize();
eh.Set(__FUNCTION__,__FILE__,__LINE__,EHTYPE_ERROR,LoadStringFromDLL(IDS_ERROR_CREATECOMPATIBLEDC).c_str());
return false;
}
BITMAP bm;
if (GetObject(hBitmap,sizeof(bm),&bm) == 0)
{
eh.Initialize();
eh.Set(__FUNCTION__,__FILE__,__LINE__,EHTYPE_ERROR,LoadStringFromDLL(IDS_ERROR_GETOBJECT_HBITMAP).c_str());
return false;
}
float cosine = (float)cos(radians);
float sine = (float)sin(radians);
int x1 = (int)(bm.bmHeight * sine);
int y1 = (int)(bm.bmHeight * cosine);
int x2 = (int)(bm.bmWidth * cosine + bm.bmHeight * sine);
int y2 = (int)(bm.bmHeight * cosine - bm.bmWidth * sine);
int x3 = (int)(bm.bmWidth * cosine);
int y3 = (int)(-bm.bmWidth * sine);
int minx = min(0,min(x1, min(x2,x3)));
int miny = min(0,min(y1, min(y2,y3)));
int maxx = max(0,max(x1, max(x2,x3)));
int maxy = max(0,max(y1, max(y2,y3)));
int w = maxx - minx;
int h = maxy - miny;
HBITMAP hbmResult = ::CreateCompatibleBitmap(CClientDC(NULL), w, h);
if (hbmResult == NULL)
{
eh.Initialize();
eh.Set(__FUNCTION__,__FILE__,__LINE__,EHTYPE_ERROR,LoadStringFromDLL(IDS_ERROR_CREATECOMPATIBLEBITMAP).c_str());
return false;
}
HBITMAP hbmOldSource = (HBITMAP)::SelectObject( sourceDC.m_hDC, hBitmap );
HBITMAP hbmOldDest = (HBITMAP)::SelectObject( destDC.m_hDC, hbmResult );
HBRUSH hbrBack = CreateSolidBrush( clrBack );
if (hbrBack == NULL)
{
eh.Initialize();
eh.Set(__FUNCTION__,__FILE__,__LINE__,EHTYPE_ERROR,LoadStringFromDLL(IDS_ERROR_CREATESOLIDBRUSH).c_str());
return false;
}
HBRUSH hbrOld = (HBRUSH)::SelectObject( destDC.m_hDC, hbrBack );
if (destDC.PatBlt(0,0,w,h,PATCOPY) == FALSE)
{
eh.Initialize();
eh.Set(__FUNCTION__,__FILE__,__LINE__,EHTYPE_ERROR,LoadStringFromDLL(IDS_ERROR_PATBIT).c_str());
return false;
}
::DeleteObject( ::SelectObject( destDC.m_hDC, hbrOld ) );
SetGraphicsMode(destDC.m_hDC, GM_ADVANCED);
XFORM xform;
xform.eM11 = cosine;
xform.eM12 = -sine;
xform.eM21 = sine;
xform.eM22 = cosine;
xform.eDx = (float)-minx;
xform.eDy = (float)-miny;
if (SetWorldTransform(destDC.m_hDC,&xform) == FALSE)
{
eh.Initialize();
eh.Set(__FUNCTION__,__FILE__,__LINE__,EHTYPE_ERROR,LoadStringFromDLL(IDS_ERROR_SETWORLDTRANSFORM).c_str());
return false;
}
if (destDC.BitBlt(0,0,bm.bmWidth,bm.bmHeight,&sourceDC,0,0,SRCCOPY) == FALSE)
{
eh.Initialize();
eh.Set(__FUNCTION__,__FILE__,__LINE__,EHTYPE_ERROR,LoadStringFromDLL(IDS_ERROR_BITBLT).c_str());
return false;
}
::SelectObject( sourceDC.m_hDC, hbmOldSource );
::SelectObject( destDC.m_hDC, hbmOldDest );
hBitmap = hbmResult;
return true;
}
Chris
|
|
|
|
|
Please Sir,
Would you like to send me also those codes. What you have write exactly.
The second problem is that if what to print is more than one page, to click on Next button on print screen change only the page number but data stay the some,what to do.
Because me I do excatly the some that on this article that you show me.
|
|
|
|
|
|
Hi,
Can you please suggest some alternative to do the following?
I want to convert a time values Cstring to unsigned long.
Done the following:-
CTime time1("20060708121212"); // Time as CSting format as a CString variable
char *pEnd;
unsigned long ultime = strtoul(time1,&pEnd,0);
But the CString is not converted correctly to unsigned long.
Is there any other solutions please.
Thanks
Thanks
Raji
|
|
|
|
|
maximum value an unsigned long can store is 4 294 967 296 .
you try to insert a bigger valu in it, so the behavior is not what you expect...
|
|
|
|
|
Try __int64 for storing big numbers.
Chris
|
|
|
|
|
chris175 wrote: Try __int64 for storing big numbers.
1. i'm not the OP
2. __int64 is not a portable solution
|
|
|
|
|
Is there any alternate way?
Thanks
Raji
|
|
|
|
|
RajiRaghu wrote: Is there any alternate way?
not standard one...
otherwise, find a bigger type library.
|
|
|
|
|
RajiRaghu wrote: CTime time1("20060708121212");
This is not possible. Your compiler should have indicated such. Try:
CString strTime("4294967295");
DWORD dwTime = strtoul(strTime, &pEnd, 10);
"Money talks. When my money starts to talk, I get a bill to shut it up." - Frank
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
RajiRaghu wrote: CTime time1("20060708121212"); // Time as CSting format as a CString variable
CTime is not a CString.
Last time I checked, CTime did not have a constructor that accepted a string parameter.
If you have a string that is formatted as YYYYMMDDHHmmSS (Y = year, M = month, D = day, H = hour, m = minute, S = second), then you could grab the correct parts and put them into a CTime variable:
CString str = _T("20060708121212");<br />
long year = atol(str.Mid(0, 4));<br />
long month = atol(str.Mid(4, 2));<br />
long day = atol(str.Mid(6, 2));<br />
long hour = atol(str.Mid(8, 2));<br />
long minute = atol(str.Mid(10, 2));<br />
long second = atol(str.Mid(12, 2));<br />
CTime time(year, month, day, hour, minute, second);
If you decide to become a software engineer, you are signing up to have a 1/2" piece of silicon tell you exactly how stupid you really are for 8 hours a day, 5 days a week
Zac
|
|
|
|
|
RajiRaghu wrote: But the CString is not converted correctly to unsigned long.
Is there any other solutions please.
why you want unsigned long with SystemDate! any specific reason?
"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
|
|
|
|
|
Now I let a have a docking toolbar on the left edge of the MainFrame. I want to let the toolbar stay there always,without being changed the size.That is the user can't drag it or maximize it or close it.
I have try a few methods,but no success.I'm anxtious for the answer.
Thank every one who care this question.
|
|
|
|
|
Hope I understood your question
Remove this style CBRS_GRIPPER from m_wndToolBar.CreateEx(...)
|
|
|
|
|
|
hi all,
i need to show tool tip in my application.
i am having point with me CPoint.
all my calculation's are done.
i have all the data with me.
i am at end point onlt thing remained is to show it in tooltip.
so by having CPoint can i show that data as tooltip?
Thanks in advance
|
|
|
|
|
|