|
>IF I step in, on hitting enter in my textbox
Are you sure that OnCommand had to be generated on this event? For examlpe, OnComand will be generate if you
click some button, but not if the button set focus
or lost using Tab key.
Pretranslate massege gets ALL messages. And
if you do all right WM_COMMAND will be prosecute or
not, how you want.
================================
Useful links
|
|
|
|
|
I see in my debugging that OnCommand indeed does fire when you hit enter (if no pretranslate msg). But thanks for thinking about it...
Appreciate your help,
ns
|
|
|
|
|
I want to Create a Frame/view/doc structure On a ActiveX Control,but It will be Found Memory leak! And I Found that the
reasons is :
CDocManager* CDocManager::pStaticDocManager;
CPtrList* CDocManager::pStaticList;
How Can I avoid Memroy leak?
the Following is My Code :
BOOL Create()
{
if( m_pFrameWnd )
{
if( IsWindow(m_pFrameWnd->m_hWnd) ) return TRUE;
}
CSingleDocTemplate * pDocTemplate;
pDocTemplate = new CSingleDocTemplate(IDR_MAPTYPE,
RUNTIME_CLASS(CMapDoc),
RUNTIME_CLASS(CMapFrame),
RUNTIME_CLASS(CMapView));
CMapDoc * pDoc = new CMapDoc;
CCreateContext Context;
Context.m_pCurrentDoc = pDoc;
Context.m_pNewDocTemplate = pDocTemplate;
Context.m_pNewViewClass = RUNTIME_CLASS(CMapView);
Context.m_pLastView = NULL;
Context.m_pCurrentFrame = NULL;
CMapFrame * pFrameWnd = new CMapFrame;
m_pDoc = pDoc;
m_pFrameWnd = pFrameWnd;
m_pDocTemplate = pDocTemplate;
CRect rcMap;
GetClientRect(&rcMap);
BOOL ret = m_pFrameWnd->Create(AfxRegisterWndClass(CS_DBLCLKS), NULL, WS_CHILD|WS_VISIBLE, rcMap,this,NULL,&Context);
m_pFrameWnd->ShowWindow(SW_SHOW);
return ret;
}
ZHANGYIFEI
|
|
|
|
|
I need to work with encoded text files in visual studio environment. I can see two ways and two problems:
1. How can i override Save & Open methods of ITextDocument (IGenericDocument?)?
or 2. How can i change loaded document content without setting "saved" flag and how can i resave document to file without being asked by studio to "reload externally modified file"?
|
|
|
|
|
Hello,
This is a dumb question but I'm using the following to stream RTF from a .rtf file to a CRichEditCtrl.. The problem is that it's only reading in the 4096, I understand it's because my cBuf is only 4096.. Is there a way to read the whole file in with out having to declare the size of the cBuf char?? Heres my code..
CFile fileRead;
if(fileRead.Open(strFile,CFile::modeRead))
{
char cBuf[4096];
UINT uBytesRead;
while(uBytesRead = fileRead.Read(cBuf, sizeof(cBuf)-1))
{
cBuf[uBytesRead] = NULL;
SetRTF(CString(cBuf));
}
fileRead.Close();
}
Whoever said nothing's impossible never tried slamming a revolving door!
|
|
|
|
|
You can use CRichEditCtrl::ReplaceSel to append text in to the control.
Pavel
Sonork 100.15206
|
|
|
|
|
It's not stopping at 4096.. but it is stopping before the end.. I wonder if the CRichEditCtrl has a text/size limit (I didn't declare one in my dialogs Init). I changed the 4096 to 1024 and it still reads in the same amount.. I re-wrote the code like this..
CFile fileRead;
if(fileRead.Open(strFile,CFile::modeRead))
{
char cBuf[1024];
UINT uBytesRead;
CString strBuff;
while(uBytesRead = fileRead.Read(cBuf, sizeof(cBuf)-1))
{
cBuf[uBytesRead] = NULL;
strBuff += CString(cBuf);
}
SetRTF(strBuff);
fileRead.Close();
}
Whoever said nothing's impossible never tried slamming a revolving door!
|
|
|
|
|
I think it is because your while ( condition ) is testing the result of an assignment operation instead of testing for an end of file condition. Try something like this
uBytesRead = fileRead.Read(cBuf, sizeof(cBuf)-1);
while ( uBytesRead == 1024 )
{
strBuff += CString(cBuf);
uBytesRead = fileRead.Read(cBuf, sizeof(cBuf)-1));
}
strBuff += CString(cBuf);
SetRTF(strBuff);
fileRead.Close();
Chris Meech
"what makes CP different is the people and sense of community, things people will only discover if they join up and join in." Christian Graus Nov 14, 2002.
"AAAAAAAAAHHHHHH!!!!! Those leaks are driving me crazy! How does one finds a memory leak in a garbage collected environment ??! Daniel Turini Nov. 2, 2002.
|
|
|
|
|
It still stops at the same spot.. Maybe theres something wrong with SetRTF.. weird, like the person said after your post, if im not reading the whole file the SetRTF wouldn't work because I wouldn't have a complete RTF string, so I'm guessing that this "read part" is probably working it's just not displaying the whole file... weird.
Any way thanks everyone for helping me, im going to look deeper into my SetRTF function. And im going to look at the string before SetRTF gets called.
Thanks again,
Rob
Whoever said nothing's impossible never tried slamming a revolving door!
|
|
|
|
|
I think, You need to read the whole file and then set it, because of the RTF format which is structured, and can't be added into RichEdit in chunks split at random.
Pavel
Sonork 100.15206
|
|
|
|
|
Question: What is SetRTF()?
================================
Useful links
|
|
|
|
|
I use SetRTF to stream an RTF string into a RichEdit control or view.. It's declared like this..
void SetRTF(CString sRTF);
static DWORD CALLBACK CBStreamIn(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb);
void CMyView::SetRTF(CString sRTF)
{
EDITSTREAM es;
es.dwError = 0;
es.pfnCallback = CBStreamIn;
es.dwCookie = (DWORD) &sRTF;
GetRichEditCtrl().StreamIn(SF_RTF | SFF_SELECTION, es);
}
DWORD CALLBACK CMyView::CBStreamIn(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
{
CString *pstr = (CString *)dwCookie;
USES_CONVERSION;
if( pstr->GetLength() < cb )
{
*pcb = pstr->GetLength();
memcpy(pbBuff, T2CA((LPCTSTR)*pstr), *pcb );
pstr->Empty();
}
else
{
*pcb = cb;
memcpy(pbBuff, T2CA((LPCTSTR)*pstr), *pcb );
*pstr = pstr->Right( pstr->GetLength() - cb );
}
return 0;
}
Rob
Whoever said nothing's impossible never tried slamming a revolving door!
|
|
|
|
|
Hi:
I'm beginner in Activex programming and recently i have written a custom edit-box.But i want to add two property for Bkack-Color and
Text-Color of this editbox(m_backColor AND m_textColor).So i used the following codes in "OnDraw" function to do this:
//////////////////////////////////////////////////////////////////////
void CTextBoxExCtrl::OnDraw(
CDC* pdc, const CRect& rcBounds, const CRect&
rcInvalid)
{
DoSuperclassPaint(pdc, rcBounds);
CBrush *pBrush;
pBrush=new CBrush(m_backColor);
pdc->FillRect(rcBounds,pBrush);
pdc->setTextColor(m_textColor);
//----> As you know type of m_backColor And m_textColor is OLE_COLOR;
///////////////////////////////////////////////////////////////////////
the color of background successfully changed,But whenever i want to
write in editbox ,background'color change to white color.
is my methode an appropriate solution? please help me.
Please excuse me for bad comments,english isn't my native language.
Thanks a lot.
|
|
|
|
|
Not sure if this will help but you may need to handle the key down message and do a Invalidate on the control so it gets repainted.. Again this is just a guess.
Whoever said nothing's impossible never tried slamming a revolving door!
|
|
|
|
|
I recommend you download the source code for my article[^] and take a look how the base class handles setting/getting the text and background colors.
Regards,
Alvaro
When birds fly in the right formation, they need only exert half the effort. Even in nature, teamwork results in collective laziness. -- despair.com
|
|
|
|
|
I have two editboxes. I am overriding pretranslate for WM_KEYDOWN and VK_RETURN. How can I distinguish between the editboxes to see which one the user pressed enter in?
I also tried overriding OnCommand and have rthe same problem there. In fact both these are running nomatter where I hit enter on the CDialog. I only want the function to handle the enter key presses for the two edit boxes, each one individually. I tried doing GetSafeHWnd:
if ( p->GetSafeHwnd() == m_combo.GetSafeHwnd() )
where I get p from GetFocus but it never says its true.......I actually checked all the HWNDS of all the controls on my UI and none of them compared with the safeHWnd resulting from GetFocus....I think I even checked out the HWND of the UI itself too...So what is it thinking the focus is on? How can I get it to run on if its one of the two editboxes thats getting "Enter"?
Thanks
Appreciate your help,
ns
|
|
|
|
|
Did you try comparing the hwnd in the MSG object (passed into PreTranslateMessage) against the GetSafeHwnd() of the controls?
Regards,
Alvaro
When birds fly in the right formation, they need only exert half the effort. Even in nature, teamwork results in collective laziness. -- despair.com
|
|
|
|
|
Just did that ...but none of them match the hwnd of pMsg..
BTW its a comobox editpart that I want to trap the enter for..
Appreciate your help,
ns
|
|
|
|
|
If it's a combo box, then the edit box is just a child window with an ID of 1001. So you can do something like:
CWnd* pEditCtrl = GetDlgItem(IDC_COMBO_WHATEVER)->GetDlgItem(1001);
You can then compare the m_hWnd of that against the hwnd of the MSG object and it should work.
Regards,
Alvaro
When birds fly in the right formation, they need only exert half the effort. Even in nature, teamwork results in collective laziness. -- despair.com
|
|
|
|
|
You have resolved the mystery that has been plaguing me for a week!!!!! I cant thank you enough!
Where did you learn about the 1001? Is it in MSDN ? Does the listbox part of the combo have a "code number" too? 1002?
Appreciate your help,
ns
|
|
|
|
|
Glad to have helped.
I don't recall how I learned about the edit control's ID, but I had actually forgotten that it was 1001. I knew it had some fixed number, but I couldn't remember it. So I googled for "ID of edit control of combo box" and found the answer in an article in CodeGuru.
Regards,
Alvaro
When birds fly in the right formation, they need only exert half the effort. Even in nature, teamwork results in collective laziness. -- despair.com
|
|
|
|
|
Hello,
I currently work on a MFC C++ application with Visual 6.0.
This application have to manage 2 screen, 1 with the main Windows display, the second have to display a bmp or jpeg picture.
Does someone know how to manage the second screen ?
Thank you !
Paul JOACHIM
|
|
|
|
|
I don't know if that's what you want but you can use a splitter window (this will divide the screen like, for example, the file explorer).
Take a look at CSplitterWnd documentation !
What kind of project do you use?? Dialog based or SDI/MDI ?? The Splitter window is easy to implement in a SDI application.
|
|
|
|
|
Thank you for your answer. But I can't use a splitter windows because I work whith a existing application and I can't change its display. I just can add a second video flow (just for display bmp and jpeg picture).
Do you have an other idee ?
|
|
|
|
|
I studied the CSplitterWnd class like Cedric proposed me, and I think my first message was not clear. When I say "I want to manage 2 screen", I mean "2 monitor". So the CSplitterWnd class is not good for me.
|
|
|
|