|
Have you already tried CHtmlView::PutProperty(..) ?
virtual void BeHappy() = 0;
|
|
|
|
|
No,remark me that.
I am not a genius, but shed more sweat!
|
|
|
|
|
Hi, i have a popup menu for contextmenu.And i wrote the function for each menu in CMainframe.
I have OnContextMenu() in each view class and in one dialog class.Its works fine in Dialog class.But not in View class.Codings are below:
CMainframe funciton:
void CMainFrame::OnUpdateFptrend(CCmdUI* pCmdUI)
{
((CMainFrame *)AfxGetMainWnd())->SendMessage(WM_COMMAND,ID_TRENDVIEW,NULL);
}
void CMainFrame::OnUpdateFptuning(CCmdUI* pCmdUI)
{
((CMainFrame *)AfxGetMainWnd())->SendMessage(WM_COMMAND,ID_TUNINGVIEW,NULL);
}
Dialog class Contextmenu:
void CFacePlate::OnContextMenu(CWnd* pWnd, CPoint point)
{
CMenu mnuPopup;
mnuPopup.LoadMenu(IDR_FPMENU);
CRect rBarRect;
rBarRect.left = rBarRect.top = 0;rBarRect.right = 1000;rBarRect.bottom = 300;
CMenu *mnuPopupMenu = mnuPopup.GetSubMenu(0);
ASSERT(mnuPopupMenu);
if( rBarRect.PtInRect(point) )
mnuPopupMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);
}
View class:
void CGroupView::OnContextMenu(CWnd* pWnd, CPoint point)
{
CMenu mnuPopup;
mnuPopup.LoadMenu(IDR_FPMENU);
CRect rBarRect;
rBarRect.left = rBarRect.top = 0;rBarRect.right = 1150;rBarRect.bottom = 390;
CMenu *mnuPopupMenu = mnuPopup.GetSubMenu(0);
ASSERT(mnuPopupMenu);
if( rBarRect.PtInRect(point) )
mnuPopupMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);
}
When i press popup menu from Faceplate(Dialogclass),it goes to Mainframe function.At the same time when i press menu from any view class,it doesnot go to Mainframe function.Why its like that?
Anu
|
|
|
|
|
Try to replace the last parameter (this ) with AfxGetMainWnd() ,
or define your reations for the view too
virtual void BeHappy() = 0;
|
|
|
|
|
I need to turn strings into numbers ASAP, but I'm not sure I've gone about it the right way.
I'm calling into a 3rd party DLL which returns me a load of numbers as text. The text is actually a very basic XML. If I parse the XML, I can tell how many numbers are in the text.
The XML only has 2 elements, so I can parse it myself, but since I use XML in other places as well, I've incorporated MSXML to deal with the XML.
So I get a char* pchValue[PRESET_NUMBER] back from the 3rd party DLL which I turn into a CString for easy handling. It goes through several classes and across a thread or two before ending up in the number crunching class.
The content of pchValue looks like
<MyXMLNode>
0
1
<MyChildNode N="10">
0 1 2 3 4 5 6 7 8 9
</MyChildNode>
</MyXMLNode>
Here, I use MSXML to parse the XML. But the bulk of the information is still in a block of text. So I have to loop through it whilst looking for delimiters using CString::Find() . I chop up the string using CString::Mid(int,int) then use atoi(char*) to get each value which I pile into a member variable char* .
The question is this: is there a quicker and not so complicated way to do this?
Things that worry me are:
MSXML uses a lot of BSTR, so I'm calling a lot of CString::AllocSysString() and FreeSysString(BSTR) .
CString probably isn't the fastest way to work with strings.
But, functions like CString::Find() and CString::Mid(int,int) make my life very easy. I wouldn't know where to start if I couldn't use CString .
I use atoi to convert text into numbers, but from what I can tell this is as fast as you can do that.
So has anyone got any ideas to speed this up without making it too complicated?
Is the way I'm doing this significantly slower than other methods?
Thanks...
Almost, but not quite, entirely unlike... me...
|
|
|
|
|
Are you using MSXML also to query inside the XML , e.g. for obtaining directly the content of the text node "0 1 2 3 4 5 6 7 8 9 "?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
Yes, I do:
MSXML2::IXMLDOMDocument* pXMLDOM;
MSXML2::IXMLDOMNode* pNode;
BSTR bstrContent;
pXMLDOM->get_firstChild(&pNode);
pNode->get_firstChild(&pNode);
pNode->get_text(&bstrContent);
Then something like
CString strContent(bstrContent);
SysFreeString(bstrContent);
int iPos = strContent.Find("\t"); etc etc etc...
Almost, but not quite, entirely unlike... me...
|
|
|
|
|
Well, if the performance is OK, I wouldn't change such approach.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
CPallini wrote: if the performance is OK
That's the thing... I'm thinking it might be too slow.
But I have to balance the time it's going to take me to understand and write lower level code...
Almost, but not quite, entirely unlike... me...
|
|
|
|
|
At first, you may try to discard the CString step and parse directly the BSTR .
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
CPallini wrote: parse directly the BSTR.
Sorry for being dim, but does that mean I have to check each character to see what's written?
Almost, but not quite, entirely unlike... me...
|
|
|
|
|
Well, you may consider the BSTR as a wide char string, hence you may use the corrensponding functions like, for instance, wcstok [^].
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
hi,
i m reading data of csv file in a char buffer like this
CFile shopCart(strFileName,CFile::modeRead);
char buff[5000]={0};
shopCart.Read(buff,sizeof(buff));
and then saving changes before closing application in this way.
CFile::Remove(strFileName);
CFile csvFile(strFileName,CFile::modeWrite |CFile::modeCreate );
strCSV = L"|" + strCSV+ char(13) + char(10);
csvFile.Write(strCSV,strCSV.GetLength()*sizeof(TCHAR));
problem is that at first exec buffer holds data of all the file but after closing and re exec buffer contains only one character of file even though file contains same data after updation.wat can be the problem may b?
|
|
|
|
|
Please compare the return values of UINT uiReadBytes = chopChart.Read(..);
at the first an secon running and post them here
virtual void BeHappy() = 0;
|
|
|
|
|
in both cases uireadbytes contains 0.
|
|
|
|
|
Try it :
{
...
CFile cFile;
if (cFile.Open(strFileName, CFile::modeRead)) {
BYTE byBuffer[1024] = {0};
UINT uiReadBytes = cFile.Read(byBuffer, sizeof(byBuffer));
CString cszMessage;
cszMessage.Format(_T("File: %s:\r\nCount of read bytes = %u"),
strFileName, uiReadBytes);
AfxMessageBox(cszMessage);
cFile.Close();
}
...
}
virtual void BeHappy() = 0;
|
|
|
|
|
actually on saving file at close of application it is inserting end of file after every character.this is actually the problem.
|
|
|
|
|
Please answer,
what have you seen at the message boxes ?
virtual void BeHappy() = 0;
|
|
|
|
|
in both cases it is showing count 1024 in messageboxes..my qus is that where is my code inserting EOF after every character?
|
|
|
|
|
|
why my code is inserting EOF after evry character on saving file.where my code is wrong?
|
|
|
|
|
When your project is configured as UNICODE project
the output will be performed by two bytes per character...
Would you like to see your output in ANSI ?
virtual void BeHappy() = 0;
|
|
|
|
|
yes?but i want to keep the project as unicode
|
|
|
|
|
چرا که نه؟
Just convert your string to ANSI sequence:
#include <AtlConv.h>
...
{
...
USES_CONVERSION;
LPSTR lpszANSI = T2A(cszOut);
cOutFile.Write(lpszANSI, strlen(lpszANSI));
...
}
virtual void BeHappy() = 0;
|
|
|
|
|
thanx a lot Eugen Podsypalnikov that was what the problem was actually it was inserting extra byte.thanx nw it is working fine after converting to ansi.
Regards
|
|
|
|