|
Aha, an interesting function! Although it does say 'uses statistical analysis... these tests are not foolproof' - even Microsoft are at a loss sometimes! It will certainly be easier than writing your own though, provided you dont want to support Win9x
|
|
|
|
|
I also use the WinAPI function IsTextUnicode to test if a given text is unicode encoded or not.
There is no full proof detection method, also as pointed out by the reply below, it is HIGHLY recommended that all unicode text be prefixed by the 0xFEFF (or 0xFFFE) header to indicate the encoding. But this may not always be the case (for misbehaving progs).
The IsTextUnicode function, can then use a combination of statistical methods to give a probability estimate on the likely-hood of the given text being unicode.
I've used it in my programs and have had good results.
The best you could probably do is in addition to using these detection method, is to have a fallback in your program to force treating any known file as UNICODE or ANSI encoded.
"..Even my comments have bugs!"
Inspired by Toni78
|
|
|
|
|
The accepted UNICODE convention is that a UNICODE file begins with the bytes 0xff,0xfe or 0xfe,0xff depending on whether it was produced on a big-endian or little-endian platform.
It's not a standard, but is endorsed by the UNICODE consortium and is practically an industry standard.
Ryan
Being little and getting pushed around by big guys all my life I guess I compensate by pushing electrons and holes around. What a bully I am, but I do enjoy making subatomic particles hop at my bidding - Roger Wright (2nd April 2003, The Lounge)
Punctuality is only a virtue for those who aren't smart enough to think of good excuses for being late - John Nichol "Point Of Impact"
|
|
|
|
|
However, I will need to put the text that I read into a string so that I could perform string manipulation on it.
So I will need to know if it is ansi or unicode in order to perform the appropriate conversion to ansi if it is unicode.
... correct me if I am wrong!
Jeremy Pullicino
C++ Developer
Homepage
|
|
|
|
|
OpenStreamOnFile is a MAPI function - I would not like to use MAPI - is there an equivalent function that is not part of MAPI?
Jeremy Pullicino
C++ Developer
Homepage
|
|
|
|
|
It seems to happen quite frequently in my MFC projects that the dropdown list in ClassWizard has only a subset of the classes in the project, for example if I have multiple Views, most of them are missing. The ClassView of VC6 shows all of them correctly. This makes it a pain to add message handlers etc, although I can do it by right-clicking on the ClassView.
Does anyone understand this - is it a bug or a feature? Can I fix it?
thanks for any help.
|
|
|
|
|
There are several things to consider. Make sure you have all the //{{AFX_VIRTUAL and //{{AFX_MSG blocks filled in correctly. If your project does not have a lot of files in different directories you may want to rebuild the .clw file. You can do this by deleting the .clw file and then clicking ctrl-w. One think that I do is open the .clw file in a text editor and add the missing classes. After a quick inspection you should figure out what is needed.
John
|
|
|
|
|
John,
thanks very much, deleting the .clw file and rebuilding the ClassWizard data did the trick.
regards
Andrew
|
|
|
|
|
I have an MFC app and I want to use a dialog to filter data in the document. But how do I get hold of GetDocument()? All I can find that almost works is to use in OnInitDialog
CTransistDoc* pDoc = (CTransistDoc*) CLeftPaneView::GetDocument();
ie I try to get it via my View, but this fails with
error C2352: 'CView::GetDocument' : illegal call of non-static member function
Which seems to be saying that OnInitDialog() is a static function. It is declared normally
virtual BOOL OnInitDialog();
How do I sort this out? And where is this kind of nonsense explained? Thanks in advance for any help.
|
|
|
|
|
Mister Transistor wrote:
CTransistDoc* pDoc = (CTransistDoc*) CLeftPaneView::GetDocument();
You are calling GetDocument as a static function (shown by the ::GetDocument). What you need to do here is get pointer to the class that contains the docuement, and call the GetDocument from that pointer. So it'd be something like this:
CLeftPaneView *pLeftView;
CTransistDoc *pDoc;
CWnd* pWnd;
pWnd = m_wndSplitter.GetPane(0, 1);
pLeftView = DYNAMIC_DOWNCAST(CLeftPaneView, pWnd);
pLeftView = pDoc->GetDocument();
This is how I get my document pointers in order to manipulate my docuement information.
Hope this helps!
|
|
|
|
|
that's very interesting thank you ...
I think you mean
pDoc = pLeftView->GetDocument();
I'll try that shortly. Thanks again.
Andrew
|
|
|
|
|
Create another constructor in your dialog class that accepts a CDocument pointer. Then construct your dialog object like:
CMyDialog dlg(this);<br />
dlg.DoModal();
Now your dialog class can communicate with the document class with the saved pointer.
|
|
|
|
|
Ooo.
That's quick and easy. I like that! Thanks Dave!
|
|
|
|
|
will1383,
DavidCrow has a good idea, but remember that the default constructor for a dialog is:
CMyDialog(CWnd *pParent);
So you should create it like this:
CMyDialog dlg(this);
The this parameter being a pointer to the parent window. It is good practice to always set the parent for a dialog. Don't create them like this:
CMyDialog dlg;
If you do dialogs can sometimes not come to the top or fall behind other windows. So define your new constructor like so:
CMyDialog(CWnd *pParent, CMyDoc *pDoc);
Now create your dialog like this:
CMyDialog dlg(this, GetDocument());
Now you have the best of both.
Jonathan Craig
www.mcw-tech.com
|
|
|
|
|
Do you know of performance difference between new vs. CoTaskMemAlloc with explicit constructor call?
Reason is, I have to pass around CoTaskMemAlloc'ed arrays quite often, so I'm basically managing two different array classes (a legacy new one, and a CoTaskMemAlloc one). I seriously thing of changing the legacy one to use CoTaskMemAlloc, so I can Detach() a counted array.
"Der Geist des Kriegers ist erwacht / Ich hab die Macht" StS
sighist | Agile Programming | doxygen
|
|
|
|
|
hello, I'm trying to implement drag and drop in my program, i'm using the drag nd drop classes by Leon Finker on CP. I had it working then noticed it now doesn't work, i have old source where it does work, but apart from things i changed in ftp classes etc there is not differnces, i've even copied the to window classes that implement drag and drop to the new src, and compiled it but still drag and drop fails. it fails on RegisterDragDrop the code i use is:
<br />
dropTarget = new DropTarget(m_hWnd);<br />
if (dropTarget == NULL)<br />
return false;<br />
<br />
dropTarget->AddRef();<br />
<br />
if (FAILED(RegisterDragDrop(m_hWnd, dropTarget))) {<br />
dropTarget = NULL;<br />
return false;<br />
}<br />
...<br />
This is from the drag and drop example Leon provides. and RegisterDragDrop always fails, but not in the other source, really annoying me. Anyone got any ideas of what this could be from? been trying to figure it out for ages!
thanks in advance for any help.
Luke
EDIT: I'm using the WTL framework if that helps or matters
|
|
|
|
|
Ok, very strange I have 2 list views that are trying to do the drag and drop, i also have a RichEditCtrl and in its create method it calls its SetReadOnly(TRUE); method. which makes RegisterDragDrop fail. So i put the readonly bit in the RichEdit.create(..., ES_READONLY) bit but that makes RegisterDragDrop fail. I think this is very weird, the RichEdit.create method gets called before the to listview get created, i'll try swaping them but, still this shouldn't be happening. any ideas?
Luke.
|
|
|
|
|
Hello,
I'm searching for a good explanation for Thread Safety and Brute Force Locking.
Mybe someone knows a good one or has an example.
Thanks, aenima
|
|
|
|
|
Hi all,
I need to know is there any windows API call avialable to query the Network Interface Cards in my pc. I also need to know what are the IP Address and subnet mask assigned to a particular NIC.
Thanks in advance.
|
|
|
|
|
See if GetAdaptersInfo() is of any help.
|
|
|
|
|
hello all,
Could someone show me how to expand a project in ClassView window which has more than about 4000 classes? When I tried to expand a project to view all classes in Class View window, My Visual C++ 6.0 showed a number of files left to load, then it hanged on about 20 files left, then nothing was showed, in addition, the Workspace window was empty although the project title was still there. One special thing is FileView window is OK to expand!!! but ClassView!!!
Is there any option to limit the total of classes to display in ClassView window? or my Visual C++ 6.0 version has bug? or my PC has problem?
FYI, my system : P4 1.6 Ghz, 256 MB RAM, Windows XP service pack 1, 40 GB hard drive
Thanks for any help.
khanh
|
|
|
|
|
How Can I monitor the printing queue, therefor i can
delete some queue, add queue etc. according some logic???
|
|
|
|
|
See these articles - API calls you are looking at OpenPrinter, FindFirstPrinterChangeNotificiation, SetPrinter etc.
'--8<------------------------
Ex Datis:
Duncan Jones
Merrion Computing Ltd
|
|
|
|
|
|
I have a doc/view app with a static splitter and one view is a CTreeView control. I have written a Serialize routine for the Doc, and want to refresh the contents of the CTreeCtrl after loading the saved document. I have verified the the saved data is loaded correctly into the program. I can initialize the tree control just fine from OnInitialUpdate. I believe I am supposed to use OnUpdate to initialize it after the document has changed. However, nothing I do in OnUpdate seems to have any effect. Frustrated, I tried just to enter dummy entries from it. This code below does absolutely nothing, though in debug I verify that it is executed:
void CApp_TreeView::OnUpdate(CView* /*pSender*/, LPARAM /*lHint*/, CObject* /*pHint*/)
{
HTREEITEM htTest = GetTreeCtrl().InsertItem(_T("Accounts")); // TEST
GetTreeCtrl().InsertItem(_T("Subaccounts"),0,0,htTest); // TEST
}
If I do the same exact thing in OnInitialUpdate, it inserts the entries just fine. What am I doing wrong?
Thanks
|
|
|
|