|
I assume you mean the caret, not the cursor, and you want to do so programmatically.
If so, the best way to do so is to sublcass the edit box which allows you to control the positioning of the caret. However, you should be aware that this is not a trivial undertaking as you need to be knowledgeable of text sizing issues. The caret itself can also be problamatic to deal with.
"Any clod can have the facts, but having opinions is an art."
Charles McCabe, San Francisco Chronicle
|
|
|
|
|
Actually, I need to correct myself.
I checked and the CEdit api does have a PosFromChar method
So you could do something like this...
myedit.SetCaretPos( myedit.PosFromChar( index ));
That was not there the last time I had to do the same thing.
"Any clod can have the facts, but having opinions is an art."
Charles McCabe, San Francisco Chronicle
|
|
|
|
|
You can do it using the SetCaretPos() method.
Regards,
Brian Dela
"There should be an amendment to the constitution, that every president must be examined for paranoia before moving into office." - peterchen
|
|
|
|
|
void CEdit::SetSel(DWORD dwSelection, BOOL bNoScroll = FALSE);
void CEdit::SetSel(int nStartChar, int nEndChar, BOOL bNoScroll = FALSE);
To set the cursor at the end of the text within the control...
UpdateData();
m_EditControl.SetSel(m_EditContent.GetLength(), m_EditContent.GetLength());
UpdateData();
((CEdit *) GetDlgItem(IDC_EDIT))->SetSel(m_EditContent.GetLength(), m_EditContent.GetLength());
If you want to use the first function you have to set the starting position in the low-order word and and the ending position in the high-order word...thus
UpdateData();
DWORD dwSelection = m_EditContent.GetLength();
dwSelection |= m_EditContent.GetLength() << 16;
m_EditControl.SetSel(dwSelection);
UpdateData();
DWORD dwSelection = m_EditContent.GetLength();
dwSelection |= m_EditContent.GetLength() << 16;
((CEdit *) GetDlgItem(IDC_EDIT))->SetSel(dwSelection);
Ciao, Andreas
"Software is like sex, it's better when it's free." - Linus Torvalds
|
|
|
|
|
Can somebody please tell whats wrong with my codes:
LPSTARTUPINFOW si;
ZeroMemory(&si, sizeof(LPSTARTUPINFOW));
si->cb= sizeof(LPSTARTUPINFOW);
si->dwFlags = STARTF_USESHOWWINDOW ;
si->wShowWindow = SW_SHOW;
PROCESS_INFORMATION pi;
CreateProcessWithLogonW(L"Arash",L"Mazy",L"aaa",NULL,(LPCWSTR)m_pathstring.GetBuffer(),NULL,CREATE_NEW_CONSOLE,NULL,NULL,si,&pi);
Access violation happend for this line:
si->cb= sizeof(LPSTARTUPINFOW);
Mazy
"And the carpet needs a haircut, and the spotlight looks like a prison break
And the telephone's out of cigarettes, and the balcony is on the make
And the piano has been drinking, the piano has been drinking...not me...not me-Tom Waits
|
|
|
|
|
LPSTARTUPINFOW is a pointer to a STARTUPINFOW;
You must creaet a STARTUPINFOW object not a LPSTARTUPINFOW object.
STARTUPINFOW si;
LPSTARTUPINFOW lpsi = &si;
ZeroMemory(lpsi, sizeof(STARTUPINFOW));
.
.
.
"Any clod can have the facts, but having opinions is an art."
Charles McCabe, San Francisco Chronicle
|
|
|
|
|
Hi, am the author of a movie collection organizer and I have noticed that there are other ones like it that have the capability to extract movie information from the IMDb and add it to dialog boxes in their program. I would like to add this functionality to mine as well but I have no idea where to start from. Does the data access depend on the layout of the site and how they store their data or there are different ways to do the same thing. If anyone is familiar with this site and some tricks on how to extract data from it please help me out on this. Thanks in advance.
|
|
|
|
|
first, contact a lawyer. what you're describing will likely be fair game for a copyright lawsuit.
-c
Please stand by
|
|
|
|
|
Are you serious? How can the other companies be doing it themselves. Besides they offer free access/downloads to all their info for non-commercial use, which is what I am doing since I am offering it for free.
|
|
|
|
|
georgiek50 wrote:
Besides they offer free access/downloads to all their info for non-commercial use
hmm. i didn't know that. then there's no problem, i guess
-c
Please stand by
|
|
|
|
|
Ok, now that we got the legality issue out of the way, do you have any idea of how to do it?
|
|
|
|
|
Since the information online is likely to change frequently.
Decide on a report format that your program would like and
then put the parsing code on your web site. Make your program
download the parsing code (probably a small dll, or (my
preference) a perl script.) each session (hey, you're online
anyhow right?) and use that to parse the fetched web pages.
All you are doing then is acting on behalf of the user
legitimately. I mean, what's the big difference between
grabbing html and presenting it one way (most browsers)
and grabbing html and presenting it another (your program's
format)? Your web site would never see the web pages-- your
app is just a variation of browser. I don't think there
would be any legal issues in this case, but then that's
just a reasonable opinion.
|
|
|
|
|
So basically what you think is going on is that people who have done this just wrote a routing to search through the html code, parse it, extract the details and just present it. Would an HTML session through Wininet suffice?
|
|
|
|
|
Yeah. I think that route is more robust. You can try to arrange
a method between yourself and the web site owners, but if you do
that you put yourself at the mercy of their support for that
interface.
I prefer to use perl in these cases, cause it is very good at
just this kind of work. There are tons of freely available
modules to make parsing html a snap. You can either pass on
the data to your web site for parsing or hand down the parsing
code to your app. (I don't recommend that your web site ever
try to contact the source site directly 'cause that could get
blocked.)
HTML through WININET is perfect.
|
|
|
|
|
Thanks for the info, maybe you can help me out a little more. Am I correct in thinking that an HTTP session through WININET is basically getting the contents of the HTML file the same way as if you were to "View Source" from Internet Explorer? (Meaning in that format). You also mentioned that Perl is perfect for this kind of stuff. Where can I get some online tutorials on Perl? Thanks again.
|
|
|
|
|
Yes, exactly. You also get the headers which don't show up in the "view source" option of IE.
Check out Perl.com [^]for Perl documentation.
The information you will want may require redirection and loading other
pages. So make your parser conversational.. i.e. hand it the first page,
let it parse and request further pages, hand it those pages and so forth
until it says done.
|
|
|
|
|
Thanks again for all your help. Merry Christmas to all. If you need a movie collection organizer try mine at www.movietrack.0catch.com.
|
|
|
|
|
Hey I have a linking problem that i can't seem to get rid of. I have a base class say:
class Base {
public:
void draw();
private:
....
}; Then I have a class from that..
class Something : public Base {
public:
void draw();
private:
....
}; I then have a std::list<Base> which I add objects to of type Something. i then go through the list and call each draw method.
std::list<Base>::iterator item;
for ( item = objects.begin(); item != objects.end(); item++) {
Base obj = *item;
obj.draw();
} But I get this error
error LNK2019: unresolved external symbol "public: void __thiscall Base::draw(void)" (?draw@Base@@QAEXXZ) referenced in function "public: bool __thiscall Sence::update(void)" (?update@Sence@@QAE_NXZ)
The std::list and the iteration of the list is done in another class. Reading the MSDN description of the error I can not firgure out whats wrong. commenting out the obj.draw(); line fixing it.
Any ideas? thanks.
Luke.
|
|
|
|
|
You haven't missed a keyword you think? Like virtual . :->
|
|
|
|
|
Thanks Mike, I should've got that one. oh well, thanks again
Luke.
|
|
|
|
|
The error says your code is calling Base::draw() but you did not provide a definition of that function. Adding virtual does no good in your case because that still doesn't provide the function definition, and anyway you are not calling draw() through a Base* variable.
--Mike--
If it doesn't move and it should: WD-40. If it moves and it shouldn't: duct tape.
1ClickPicGrabber - Grab & organize pictures from your favorite web pages, with 1 click!
My really out-of-date homepage
Sonork-100.19012 Acid_Helm
|
|
|
|
|
Hey thanks Mike, sorry, I'm not sure what you mean by "and anyway you are not calling draw() through a Base* variable."
I have the definition but my problem is now I add some class that extends from Base into the std::list but using
std::list<GlObject>::iterator item;
for ( item = objects.begin(); item != objects.end(); item++) {
item->draw();
}
it always executes the code in Base::draw() and not SomeOtherClass::draw() , any ideas? or more a good reference on the net that could help me out. thanks
Luke.
|
|
|
|
|
Your list is of Base objects, not pointers, so there is
no polymorphism here.
Create a list of Base pointers, and point them at some
of those other objects, or a mix or what-have-you.
|
|
|
|
|
Hi all
Can i know anywhere or anyone have visual c++ setup for me to download them..
Thanks
|
|
|
|
|
Sure, microsoft.com. The MSDN member download section.
Mind you it's probably >2GB.
|
|
|
|