|
how can i convert ms-word to bmp by program???
|
|
|
|
|
Not sure that you can, except by launching word and doing a screen capture
Christian Graus - Microsoft MVP - C++
Metal Musings - Rex and my new metal blog
"I am working on a project that will convert a FORTRAN code to corresponding C++ code.I am not aware of FORTRAN syntax" ( spotted in the C++/CLI forum )
|
|
|
|
|
Hi,
I am using sendASPI32Command for writing data to CD. But for a particular size of data sendASPI32Command returns SS_ASPI_IS_BUSY error. The error occurs when writes the last track data.
Could u pls tell in which condition this case occurs.Please help..........
AJay
|
|
|
|
|
How can i detect if a user logoffs or switches ?
Thankl you very much...
|
|
|
|
|
Is the ISensLogon interface of any help?
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
How can i do this in Win32API ?
Thank you very much...
|
|
|
|
|
GetDriveType will help you get some of that information, but I doubt you'll be able to easily get more than that.
After all, Win32 doesn't have any knowledge of how the device driver is working between the Write/Open/IoCtl command and its physical workings. Any driver can call CreateDoSdevice et al to create a file endpoint....
Sorry to not give you exact help.
Iain.
|
|
|
|
|
It's not simple but it can be done. I can't give you the code because it's owned by my employers but these basic steps should help you along.
Start by getting the drive type from your drive letter as previously suggested. For USB drives this will always be DRIVE_REMOVABLE or DRIVE_FIXED, anything else and it can be discarded at this stage.
Then you need to open a handle to the Volume with CreateFile and a file name like \\.\E:
(remember to double the slashes when you put this in a C++ string)
You can use the returned device handle to get a VOLUME_DISK_EXTENTS structure for the volume using DeviceIOControl with a IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS control code.
In the Disk Extents structure there is a DiskNumber you can now associate this with the drive letter you started with and remember it.
Now the hard part, is it USB?
The next step is to enumerate all the USB devices attached to the system using SetupDiGetClassDevs with &GUID_DEVCLASS_USB and SetupDiGetClassDevs with &DiskClassGuid to get all the disk devices. For each device use the returned handle to get Device information with SetupDiEnumDeviceInterfaces and SetupDiGetDeviceInterfaceDetail. You end up with a SP_DEVICE_INTERFACE_DETAIL_DATA structure which contains a device path. Open this path with CreateFile which gives you a device handle.
Use the device handle with DeviceIoControl and IOCTL_STORAGE_QUERY_PROPERTY and cast the result to a PSTORAGE_ADAPTER_DESCRIPTOR. This contains a BusType which will be 0x7 for USB
You can use the same device handle you called CreateFile with to do a DeviceIoControl with IOCTL_STORAGE_GET_MEDIA_TYPES_EX. Cast the returned buffer to a PGET_MEDIA_TYPES to get a structure with DeviceType. If DeviceType == FILE_DEVICE_DISK then you have a USB disk but you still don't know which drive letter it corresponds to. To determine this you need to pass the same device handle to DeviceIoControl with IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS and compare the DiskNumber in the result with the pair of DiskNumber and Drive letters that you worked out in the first step.
If this sounds like a joke it is not. I don't know any easier way to do this (took 2 weeks to develop) although I'd like to. You will need some headers from the Windows 2000 or later DDK as well for some of the GUIDS and constants. This will not work before Windows 2000. Good luck
Nothing is exactly what it seems but everything with seems can be unpicked.
|
|
|
|
|
Thank you very much for your great reply effort !
|
|
|
|
|
I'm officially impressed. I knew this would be non-trivial, and didn't think it would actually be possible!
Iain.
|
|
|
|
|
Thanks, It is definitely possible although I can't gaurentee reliability especially in the presence of many and varied dodgy USB devices and exotic drive configurations. USB is such a mess.
I had to implement this and a bit more to auto detect USB drives inserted in a PC and show them by Drive letter. Explorer does this all the time so it should be trivial
Microsoft do so like to make our lives interesting though
Nothing is exactly what it seems but everything with seems can be unpicked.
|
|
|
|
|
This has got me interested!
Explorer doesn't need to go through these conniptions. It just monitors WM_DEVICECHANGE. I just made a quickie MFC app, and added a few lines which detect drives being added and removed:
#include <dbt.h>
...
ON_WM_DEVICECHANGE ()
...
BOOL CMainFrame::OnDeviceChange( UINT nEventType, DWORD dwData )
{
BOOL bReturn = CWnd::OnDeviceChange (nEventType, dwData);
TRACE1("Event %i\n", nEventType);
DEV_BROADCAST_VOLUME *volume = (DEV_BROADCAST_VOLUME *)dwData;
if (nEventType == DBT_DEVICEARRIVAL)
{
if (volume->dbcv_devicetype == DBT_DEVTYP_VOLUME)
{
for (int n = 0; n < 32; n++)
{
if (IsBitSet (volume->dbcv_unitmask, n))
{
TRACE1("Drive %c: Inserted\n", n + 'A');
}
}
}
}
if (nEventType == DBT_DEVICEREMOVECOMPLETE)
{
if (volume->dbcv_devicetype == DBT_DEVTYP_VOLUME)
{
for (int n = 0; n < 32; n++)
{
if (IsBitSet (volume->dbcv_unitmask, n))
{
TRACE1("Drive %c: Removed\n", n + 'A');
}
}
}
}
return bReturn;
}
Which works nicely. I tested on a memory stick which actually adds two partitions. Either yaking it out, or nicely removing using the gizmo on the systray works nicely.
I think I may just turn this into a mini article!
Iain.
|
|
|
|
|
|
Splitters seem like a popular topic. I have found several examples here, elsewhere, and in the forums. But I can't seem to find any which answer my question.
I am converting a Borland C++ application to MFC. The application has a split window with a Tree on the left side, and multiple windows on the other. Basically, the right side is similar to MDI allowing for multiple windows to display at one time.
From all my research today, it seems like splitters allow for only a single window at a time and the window will fill/maximize the entire split window. Is there some way to get multiple windows within a split window?
I may start looking at Borland's internal code to find out how they do it. Or my boss may end up deciding to scrap the multiple window idea. I suspect it is not really a major feature as most people probably maximize the window anyway.
Thanks in advance for help or pointers.
|
|
|
|
|
I think I may have found what I need. I don't believe what I'm asking is possible. I finally found a thread over on MSDN[^] with someone asking a very similar question.
I am now going to take the approach of using a CDialogBar[^].
Still open to suggestions, though.
|
|
|
|
|
After reading your message, CDialogBar is exactly what I would suggest for you. It'll work, and it will be nice and easy to implement.
Glad to see you found your own solution!
Iain.
|
|
|
|
|
Thanks for the feedback. I spent all day at work trying to figure this out and found it last night while continuing my search at home.
As a sidenote, Borland OWL separates the MDIFrame from the MDIClient with distinct classes. MFC does not have this distinction, so I am having to combine the two Borland classes we have into a single CMDIFrameWnd derived class.
|
|
|
|
|
You can create another splitters in first splitter right pane and and put your windows here - vertical or horizontal or some other layout you like
|
|
|
|
|
Hi All,
I have to open a binary file and read the line. then compare the line with some string.
My code is:
<br />
ifstream aBinaryfile; <br />
string sinfo; <br />
aBinaryfile.open(fName,ios::in|ios::binary );
getline(aBinaryfile,sinfo);
CString info(sinfo.c_str());
<br />
if(info.CompareNoCase(TEXT("FirstLine"))==0<br />
{<br />
AfxMessageBox("Match"); <br />
}<br />
else <br />
{<br />
AfxMessageBox("not Match");<br />
}<br />
The result suppose to be display "Match" but right now I'm getting "not Match" eventhough content of info is "FirstLine".
Why they both are not equal when both are suppose to be equal?
Is it because I was reading the binary file?
Thank you.
|
|
|
|
|
It doesn't make sense to open a file in binary mode and then use getline, which (sorta) by
definition, is a text-mode method.
I'm pretty sure the string you read has the newline character at the end, which is NOT a match to
your compare string.
if you remove the ios::binary flag it should work
Mark
"Posting a VB.NET question in the C++ forum will end in tears." Chris Maunder
|
|
|
|
|
The file contains eastern chars in the file.
In order to read the eastern chars I think I do need to open it in binary mode, dont' I?
thanks.
|
|
|
|
|
The file that I have to read is UTF-8 text file. And it contains file name that is in eastern characters like Chinese, Japanese, Jew, etc. as shown in following;
[begin file names]
file1 : c:\temp\פסטיבל סגול ה- 11 - למדיטציה ואהבה.txt
file2 : c:\temp\sampleDocument.doc
file3 : c:\temp\日本側とのアレン.jpg
[/begin file names]
I need to store those info, file name, in the same way they appear in the text file.
then I have to open those files after I got the name of the file with path from the UTF-8 text file. Therefore, I tried to open the file in the binary mode.
Right now,
1) I read the first line, "[begin file names]", then
2) I have to compare if the string that i just read is "[begin file names]" using CString::CompareNoCase(strRead,"[begin file names]")
3) read the next line, which is "file1 : c:\temp\פסטיבל סגול ה- 11 - למדיטציה ואהבה.txt",
if CompareNoCase return zero.
4) store the file name
.
.
.
etc.
right now I am getting "file1: ?????? 11 ????.txt.
How can I read the UTF-8 file so I can get the information from the file correctly ?
I'm using regular C++.
Thanks
thanks.
|
|
|
|
|
pnpfriend wrote: right now I am getting "file1: ?????? 11 ????.txt
You're getting that where? If you look at the string in binary, are all those question marks
the same multibyte character?
Mark
"Posting a VB.NET question in the C++ forum will end in tears." Chris Maunder
|
|
|
|
|
Did you consider setting Breakpoints ?
Set a Breakpoint, and SingleStep through the Code. Make (Mental)notes at what you expect to see. vs what's showing. All of us have to do this All the Time,
It's Called 'Debugging'
LateNightsInNewry
|
|
|
|
|
In addition to the other suggestions, why exactly are you mixing MFC (CString ) with STL (string )? There's no reason to use a CString object just for the sake of comparing.
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|