|
try to call printer dc (structure) to see printer's characteristics. if it doesn't sucessful you must change printer driver.
Good lack
|
|
|
|
|
I tried:
<br />
void CTrain1View::OnReadin() <br />
{<br />
CString sWriteText;
sWriteText="Rich text is shown here in sample project";<br />
<br />
EDITSTREAM es;<br />
es.dwCookie = (DWORD)&sWriteText;
es.pfnCallback = MEditStreamInCallback;
<br />
m_richedit.StreamIn(SF_RTF,es);
}<br />
<br />
<br />
<br />
DWORD __stdcall MEditStreamInCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)<br />
{<br />
CString *psBuffer = (CString *)dwCookie;<br />
<br />
if (cb < psBuffer->GetLength()) cb = psBuffer->GetLength();<br />
<br />
for (int i=0;i<cb;i++)<br />
{<br />
*(pbBuff+i) = psBuffer->GetAt(i);<br />
}<br />
<br />
*pcb = cb;<br />
<br />
*psBuffer = psBuffer->Mid(cb);<br />
<br />
return 0;<br />
}<br />
<br />
but this did not populate the richedit control. Instead it crashed precisely at :
for (int i=0;i<cb;i++)<br />
{<br />
*(pbBuff+i) = psBuffer->GetAt(i);<br />
}<br />
In the debug window I could see that the entire string was retrieved, and it entered the for loop even after that. Then crashed. so is it an indexing problem? How to fix it?
Thanks,
ns
|
|
|
|
|
From the debugger, for some reason (The string is just "Rich text" with length of 9) ,I see that cb =4092, and MSDN said that the loop index is to be less than GetLength = 9. No wonder its crashing. But what is this cb thats being passed in? Helllpp!
Thank you much,
ns
|
|
|
|
|
The for loop looks bad. Did you forget to include the condition and the increment in your post? In any case, you can simply copy a CString into a char array (as it looks like what you want to do) by doing:
strcpy (pbBuff, *psBuffer->GetBuffer(0));
*psBuffer->ReleaseBuffer(); /ravi
Let's put "civil" back into "civilization"
http://www.ravib.com
ravib@ravib.com
|
|
|
|
|
Wonder why the loop got mangled in the mail
DWORD __stdcall MEditStreamInCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)<br />
{<br />
CString *psBuffer = (CString *)dwCookie;<br />
TRACE(*psBuffer);<br />
TRACE("cb is %d",cb);
<br />
TRACE("getlength is %d",psBuffer->GetLength()); debugger says its 9, correct<br />
<br />
<br />
<br />
<br />
<br />
cb =9;<br />
<br />
TRACE("length is %d",cb);<br />
<br />
for (int i=0;i<cb;i++)<br />
<br />
<br />
{<br />
<br />
TRACE("index i is %d", i);<br />
*(pbBuff+i) = psBuffer->GetAt(i);<br />
}<br />
<br />
*pcb = cb; \\this looks weird. cb never changes....not that I can see<br />
<br />
*psBuffer = psBuffer->Mid(cb);<br />
<br />
return 0;<br />
}
I'm trying your idea now...
Thanks.
|
|
|
|
|
The for loop is
for (int i=0;i
|
|
|
|
|
i=0
i less than cb
increment i
Aaargh!
|
|
|
|
|
That's what I thought. That's a simple strcpy, so my suggestion should work.
/ravi
Let's put "civil" back into "civilization"
http://www.ravib.com
ravib@ravib.com
|
|
|
|
|
You need to surround your code with <pre> </pre>
/ravi
Let's put "civil" back into "civilization"
http://www.ravib.com
ravib@ravib.com
|
|
|
|
|
Don't forget to include "\n" at the end of your TRACE() string, otherwise you may need to cross the Atlantic to view the debugger output. Highly inconvenient.
/ravi
Let's put "civil" back into "civilization"
http://www.ravib.com
ravib@ravib.com
|
|
|
|
|
Try this:
DWORD CALLBACK _LoadRtfCallback(
DWORD dwCookie, // (in) pointer to the string
LPBYTE pbBuff, // (in) pointer to the destination buffer
LONG cb, // (in) size in bytes of the destination buffer
LONG FAR *pcb // (out) number of bytes transfered
)
{
LPCTSTR pszMsg = (LPCTSTR)dwCookie;
// number of bytes to copy
*pcb = _tcslen( pszMsg ) * sizeof(TCHAR);
// limiting it up to the buffer's size
if( *pcb > cb )
*pcb = cb;
// copying the string to the buffer
memcpy( pbBuff, pszMsg, *pcb );
// advancing to the end of the string
pszMsg += *pcb / sizeof(TCHAR);
// if it's the end of the string, returns NULL;
// otherwise, returns a pointer to the next char to transfer as the cookie
return ( *pszMsg != '\0' ) ? (DWORD)pszMsg : NULL;
}
|
|
|
|
|
I am wondering - in CRichEditStream::_LoadRtfCallback, is CRichEditStream replaced by the name of my view class? Why does this callback have a different signature type from what I see in the MSDN:
DWORD __stdcall MEditStreamOutCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
You have
DWORD CALLBACK _LoadRtfCallback(
DWORD dwCookie,
LPBYTE pbBuff,
LONG cb,
LONG FAR *pcb
)
Are these two forms of the function declaration equivalent? Can I use your function in conjunction with:
void CRichEgView::OnReadin()
{
CString sWriteText;
sWriteText="Rich text is shown here in sample project";
EDITSTREAM es;
es.dwCookie = (DWORD)&sWriteText;
es.pfnCallback = MEditStreamInCallback;
GetRichEditCtrl().StreamIn(SF_RTF,es);
}
What will this line be when used with your function:
es.pfnCallback = MEditStreamInCallback; // Specify the pointer to the callback function
Sorry if my questions sound naive
Thanks,
ns
|
|
|
|
|
Here is how I used it, -it ran but the box remained stubbornly blank!
void CTrain1View::OnReadin()
{
CString sWriteText;
sWriteText="Rich text is shown here in sample project";
EDITSTREAM es;
es.dwCookie = (DWORD)&sWriteText;
es.pfnCallback = _LoadRtfCallback;
m_richedit.StreamIn(SF_RTF,es);
}
DWORD CALLBACK _LoadRtfCallback(
DWORD dwCookie,
LPBYTE pbBuff,
LONG cb,
LONG FAR *pcb
)
{
LPCTSTR pszMsg = (LPCTSTR)dwCookie;
*pcb = _tcslen( pszMsg ) * sizeof(TCHAR);
if( *pcb > cb )
*pcb = cb;
memcpy( pbBuff, pszMsg, *pcb );
pszMsg += *pcb / sizeof(TCHAR);
return ( *pszMsg != '\0' ) ? (DWORD)pszMsg : NULL;
}
|
|
|
|
|
what is this:
for (int i=0;i {
*(pbBuff+i) = psBuffer->GetAt(i);
}
I am sorry but I never see that code and it pass compiler and linker. You check how look like declaration for for.
|
|
|
|
|
Hi,
I'm just starting out with Windows Sockets Programming and I'd like to know how one can choose a port number for his own server application that would not conflict with any other Internet applications running on the same computer e.g. ICQ, MSN Messenger ... etc. Also, what happens if I choose a port number that's already used on a given computer. If I enable the user to select another port number this means that any client application over the Internet will not be able to conntect to my server application. The whole idea is that I want to write a game and I want any player to be able to play against another player over the Internet (something like chess for example).
Thanx
(a.k.a. Wal2k) www.wal2k.com
|
|
|
|
|
Waleed wrote:
how one can choose a port number for his own server application that would not conflict with any other Internet applications running on the same computer e.g. ICQ, MSN Messenger ... etc.
You can't...
You can take a look at http://www.iana.org/assignments/port-numbers[^] and select a port not assigned for anything, but only use ports > 1024.
Waleed wrote:
Also, what happens if I choose a port number that's already used on a given computer.
Your socket-functions wil fail.
Waleed wrote:
If I enable the user to select another port number this means that any client application over the Internet will not be able to conntect to my server application.
That is correct, you can never know for sure that it will work on any computer, but selecting a not-assigned port it's lot likely gonna conflict with other software...
- Anders
Money talks, but all mine ever says is "Goodbye!"
|
|
|
|
|
Hi,
I am writing a callback TimerProc function inside my class with the prototype:
// Inside the CClassTimerDlg.h
public:
void CALLBACK EXPORT CClassTimerDlg::TimerProc
(
HWND hWnd, // handle of CWnd that called SetTimer
UINT nMsg, // WM_TIMER
UINT nIDEvent, // timer identification
DWORD dwTime // system time
);
// By the way, I copied this from the MSDN help
In my class implementation, I add a TimerProc as :
void CALLBACK EXPORT CClassTimerDlg::TimerProc
(
HWND hWnd, // handle of CWnd that called SetTimer
UINT nMsg, // WM_TIMER
UINT nIDEvent, // timer identification
DWORD dwTime // system time
)
{ Implementation of function TimerProc }
In one procedure handling a button inside the class, I put:
SetTimer(1,1000,TimerProc);
When I compile, I always receive the error message from the compiler for
the above line:
Error C2664: 'SetTimer' : cannot convert parameter 3
from 'void (struct HWND__ *,unsigned int,unsigned int,unsigned long)'
to 'void (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,unsigned long)'
None of the functions with this name in scope match the target type
How should I declare the TimerProc to correct this problem ?
Thanks a lot
|
|
|
|
|
|
a callback guy must be global or static class function
includeh10
|
|
|
|
|
Hi,
I am writing a callback TimerProc function inside my class with the prototype:
// Inside the CClassTimerDlg.h
public:
void CALLBACK EXPORT CClassTimerDlg::TimerProc
(
HWND hWnd, // handle of CWnd that called SetTimer
UINT nMsg, // WM_TIMER
UINT nIDEvent, // timer identification
DWORD dwTime // system time
);
// By the way, I copied this from the MSDN help
Below this text wrote some text by Microsoft:
The lpfnTimer callback function need not be named TimerProc, but it must be defined as follows:
void CALLBACK EXPORT TimerProc(
HWND hWnd, // handle of CWnd that called SetTimer
UINT nMsg, // WM_TIMER
UINT nIDEvent // timer identification
DWORD dwTime // system time
);
Well, I supose that is all, but ...
Branislav
|
|
|
|
|
Hello,
I have two icons that I wanna display based on the value of a check box. They're displayed in a static picture box. If the check box is checked, it displays one icon...you get the idea .
If I check the box after the app loads, it'll change the first time, but once the check box is clicked again, it won't load the other icon. I guess I need to overide a paint handler somewhere, but I'm not sure on how to do this.
Here's what I got:
HICON m_icon;<br />
<br />
if (m_enable = true)<br />
m_icon = ::LoadIcon (AfxGetInstanceHandle(), <br />
MAKEINTRESOURCE(IDI_ON));<br />
else if (m_enable = false)<br />
m_icon = ::LoadIcon (AfxGetInstanceHandle(), <br />
MAKEINTRESOURCE(IDI_OFF));<br />
<br />
((CStatic *)(GetDlgItem (IDC_PIC)))->SetIcon(m_icon);<br />
Pretty stupid on my part, --probably real straightforward.
Thanks in advance.
Matt
|
|
|
|
|
|
Thanks for your reply, Mike.
I tried your suggestion, but it still changes the first time, and just stays after that. I'm wondering if theres a problem with the logic?
Thanks.
|
|
|
|
|
ur using m_enable as a var bound to the checkbox i assume ... is it a control variable or a value variable? if its a value variable are u getting its changed state before your posted code?
either use UpdateData(TRUE); bad bad bad
or use a control variable and do mc_enable.GetCheck();
before testing value
if im way off base sorry
"... and so i said to him ... if it don't dance (or code) and you can't eat it either f**k it or throw it away" sonork: 100.18128 8028finder.com
|
|
|
|
|
Hi Matt,
Look what you write:
if (m_enable = true)
m_icon = ::LoadIcon (AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDI_ON));
else if (m_enable = false)
but you need write:
if (m_enable == true)
m_icon = ::LoadIcon (AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDI_ON));
else if (m_enable == false)
etc.
Branislav
|
|
|
|
|