|
|
If you have the screen coordinates of the pointer, then convert them to values relative to your bitmap control:
CPoint p = ...
m_cMyPicture.ScreenToClient(p);
Then probably you have to take into account the scroll position:
p += CSize(m_cMyPicture.GetScrollPos(SB_HORZ), m_cMyPicture.GetScrollPos(SB_VERT));
This is just my guess. Hope it helps.
|
|
|
|
|
can u please tell me deatiled
please
|
|
|
|
|
who r u,r u facing the same problem,
sree
|
|
|
|
|
i tried it not working
please help me,
urgent please.
sree.
|
|
|
|
|
|
I cann't understand this point........"bitmap with scrollbars in the dialog "
Please explain this so that whether i can help u
yours faithfully
ajeesh
|
|
|
|
|
Hi all..
I've been stuck for a long time in this problem. It seems very easy to convert CString to a const char * or char * in VC++, but it really does not work for embedded VC++. My code is simply trying to open a file, using fopen with file path taken from CFileDialog GetPathName().
<br />
CFileDialog dlg (TRUE, _T("maf"), NULL, OFN_HIDEREADONLY | OFN_FILEMUSTEXIST | OFN_EXPLORER, szFilters);<br />
if (IDOK == dlg.DoModal()) {<br />
CString __filepath = dlg.GetPathName();<br />
file = fopen(__filepath, "rb");<br />
}<br />
I've tried to read each single character from CString (by iteratively using GetAt() function) as follows
<br />
CString __filepath;<br />
__filepath = dlg.GetPathName();<br />
int x = __filepath.GetLength();<br />
char *filename;<br />
filename = new char [x];<br />
for (int i=0;i<x;i++) {<br />
filename[i] = (char)__filepath.GetAt(i);<br />
}<br />
But it does not work for UNICODE text.
Help me..
Houari
|
|
|
|
|
Maybe you should use Unicode character type (wchar_t ) instead of char ?
const wchar_t * filename = __filepath;
Or do you need a conversion from Unicode to ANSI?
|
|
|
|
|
Thank you for your suggest, Viorel. But when I compile the code, this error still occurs:
<br />
error C2664: 'fopen' : cannot convert parameter 1 from 'const unsigned short *' to 'const char *'<br />
I also tried using TCHAR as Milton suggest, the error becomes
<br />
error C2664: 'fopen' : cannot convert parameter 1 from 'unsigned short *' to 'const char *'<br />
Houari
|
|
|
|
|
From the first error messages it seems that your application is actually non-Unicode. See the project properties in order to check this (General --> Character Set). The solution with TCHAR should work in both cases, so the second error message is strange.
-- modified at 9:24 Tuesday 20th June, 2006
Actually in order to work in both cases, you should use _tfopen instead of fopen and _wfopen . Instead of char or wchar_t , use TCHAR . Define literal strings with _T("...") macro.
|
|
|
|
|
CString __filepath;<br />
__filepath = dlg.GetPathName();<br />
int x = __filepath.GetLength();<br />
char *filename;<br />
filename = new char [x];<br />
for (int i=0;i<x;i++) {<br />
filename[i] = (char)__filepath.GetAt(i);<br />
}
try the above code by replacing all char with TCHAR
ie char *filename; would be TCHAR *filename;<br />
filename = new char [x]; would be filename = new TCHAR [x]; and <br />
filename[i] = (char)__filepath.GetAt(i); would be filename[i] = (TCHAR)__filepath.GetAt(i);
cheers...MIlton KB
|
|
|
|
|
I fu running in UNICODE, the CString converts all data assigned to it to UNICODE.
use 'W2A' macro to convert UNICODE to ASCII..
i hope that helps u out!
;o)
|
|
|
|
|
why u want to use char*. If u use TCHAR*..the problem will be solved..
houari_id wrote: CString __filepath;
__filepath = dlg.GetPathName();
int x = __filepath.GetLength();
char *filename;
filename = new char [x];
for (int i=0;i<x;i++) {
filename[i]="(char)__filepath.GetAt(i);
}</blockquote">
This is not a good way.. Use _tcscpy instead
nave
|
|
|
|
|
I've tried this way:
<br />
char *filename;<br />
filename = new char [x];<br />
_tcscpy(filename, __filepath);<br />
And when I compile the code, this error occurs:
<br />
error C2664: 'wcscpy' : cannot convert parameter 1 from 'char *' to 'unsigned short *'<br />
Houari
|
|
|
|
|
u try this way
TCHAR *filename;
filename = new TCHAR[x];
_tcscpy(filename, __filepath);
nave
|
|
|
|
|
houari_id wrote: char *filename;
filename = new char [x];
With Unicode, use wchar_t instead.
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
No, both data type TCHAR and wchar_t are not working, this error still there for both:
<br />
cannot convert parameter 1 from 'unsigned short *' to 'const char *'<br />
Or is it something wrong with my embedded VC++ ?
Houari
|
|
|
|
|
Are you still trying to use fopen() ? If so, you are erroneously mixing MBCS and Unicode.
char szFile[MAX_PATH];
fopen(szFile, "r");
wchar_t szFile[MAX_PATH];
_wfopen(szFile, "r");
TCHAR szFile[MAX_PATH];
_tfopen(szFile, "r");
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
houari_id wrote: file = fopen(__filepath, "rb");
What is the value of __filepath at this point? When fopen() fails, what is the value of errno ?
houari_id wrote: file = fopen(__filepath, "rb"); .
If you are using Unicode, use _wfopen() instead.
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
This error occurs during the compiling the code:
<br />
error C2664: 'fopen' : cannot convert parameter 1 from 'class CString' to 'const char *'<br />
Actually, it is fine in VC++ isn't it? In MFC, I just put file = fopen (dlg.GetPathName(), "rb"); and it's work fine. But in eVC++, this seems not OK.
Houari
|
|
|
|
|
try,
file = fopen ((TCHAR*)dlg.GetPathName().GetBuffer(), "rb");
cheers.. mIlton KB
|
|
|
|
|
Actually in order to work in both cases, you should use _tfopen instead of fopen and _wfopen :
file = _tfopen(dlg.GetPathName(), _T("rb"));
|
|
|
|
|
Waaa!! It works!!
Thank you very much Viorel... and the others too... thank you...
Houari
|
|
|
|
|
Milton KB wrote: file = fopen ((TCHAR*)dlg.GetPathName().GetBuffer(), "rb");
There is no need to call GetBuffer() as the object is not being modified.
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|