|
Take a look at GetVersionEx function.
OSVERSIONINFO declared in Winnt.h and included in Windows.h.
A. Riazi
|
|
|
|
|
Hi. I have a CTypedPtrArray of CObjects derivade class. Im trying to implement a operator= overload, it compiles well, but the operator is not called!! ive putted a breakpoint inside it and it never enters it! Take a look...
class CLSITask : public CObject
{
...
CLSITask &operator=(const CLSITask &task);
...
}
//.CPP
CLSITask &CLSITask::operator=(const CLSITask &task)
{
...copying variables...
}
Thanks in advance!
|
|
|
|
|
how do u use it when u say "not called"?
CLSITask c0;
CLSITask c1;
c1=c0; //called in this way?
another thing is if define operator=, u must define copy constructor at same time (keep it as a habit).
includeh10
|
|
|
|
|
I'm trying to create an MDI app with multiple document templates.
When I have just one AddDocTemplate the file/new creates a new window.
CMultiDocTemplate* pMaintainTemplate;
pMaintainTemplate = new CMultiDocTemplate(
IDR_GOOGLETYPE,
RUNTIME_CLASS(CGoogleDoc),
RUNTIME_CLASS(CChildFrame),
RUNTIME_CLASS(CGoogleView));
AddDocTemplate(pMaintainTemplate);
As soon as i add a second AddDocTemplate right below the above code in my InitInstance method the file/new does nothing. My second AddDocTemplate looks like this
CMultiDocTemplate* pProductionTemplate;
pProductionTemplate = new CMultiDocTemplate(
IDR_GOOGLETYPE,
RUNTIME_CLASS(cProductionDoc),
RUNTIME_CLASS(CChildFrame),
RUNTIME_CLASS(cProductionView));
AddDocTemplate(pProductionTemplate);
How can I get the file/new command to ask me which document type to create??
-perseus
|
|
|
|
|
What you are asking about should happen automatically when you have multiple document templates. When you click ID_FILE_NEW, command processing should get mapped through by the application framework to the void CDocManager::OnFileNew() function declared in DOCMGR.CPP in the MFC. If you look at the function code, you will see that by default if there are 2 or more doc templates a selection dialog box will be displayed.
The function is virtual so if you have your own implementation of this function already then you may have altered this behaviour.
Roger Allen
Sonork 100.10016
WHats brown and sticky?
A stick or some smelly stuff!
|
|
|
|
|
thats what i thought...but i couldn't figure out why it wasn't working.
It turns out that i fixed my problem. I needed to add string table entries for my menu resources. once i did that my problems went away.
do you know why this is??
thanks for the response
-perseus
|
|
|
|
|
I have no idea as to how to do this. I have my window set up with a file menu and everything (print and exit work), however I can not figure out how to do this (or an open file dialog for that matter). I was wondering if anyone could help by telling me how to do this with MSVC++. I only ask because I have been searching on the internet for a few months and I cannot find any tutorials on this subject that actually work. Some seem to work just fine for the creator, but not for me. Any help would be appreciated.
Thanks,
orcblood
|
|
|
|
|
It's GetSaveFileName() if you're using the API, or CFileDialog if you're using MFC or WTL.
--Mike--
The Internet is a place where absolutely nothing happens.
-- Strong Bad
1ClickPicGrabber - Grab & organize pictures from your favorite web pages, with 1 click!
My really out-of-date homepage
Sonork-100.19012 Acid_Helm
|
|
|
|
|
Hmm thanks, how would I add file support (ie a .txt file - should be easiest no bit blitting or anything )? I have a book on windows programming but it doesn't mention anything about doing this in there. I would like to use the API, but I just don't know how to program anything in. Or if theres a tut site that you know of where I could find an easy explination (that works) then that would help too.
Any help would be appreciated once again, thanks.
orcblood
|
|
|
|
|
Hi all
Is it possible to get the name of a key on the keyboard but only knowing the virtual-key code? I know you can store all the key names and use it as a list to get the name. But isn’t it possible to get it from a windows API? I also know that you can use the GeyKeyNameText API function but that requires an lParam parameter with keystroke information but isn’t it possible to fake an lParam message and use it in GeyKeyNameText? Or are there other methods or functions of getting the key name from a virtual-key code?
Aidman » over and out
|
|
|
|
|
You are probably looking to function GetKeyNameText Function [^]
To use it, virtual-key codes have to be converted using MapVirtualKeyEx .
HTH,
K.
Angels banished from heaven have no choice but to become demons
Cowboy Bebop
|
|
|
|
|
Yes, but the GetKeyNameText function needs a lParam parameter and where the ScanCode is in a bitfeild. How do I place the Scancode (that is converted from the virtual-keycode) in a bitfeild?
Aidman » over and out
|
|
|
|
|
Here's the way to do it:
Let's suppose you want to convert the virtual key nVirtKey (UINT)
#define BUFFER_LEN 50<br />
TCHAR szBuffer [BUFFER_LEN + 1];<br />
<br />
UINT nScanCode = ::MapVirtualKeyEx (nVirtKey, 0, ::GetKeyboardLayout (0)) <<16 | 0x1;<br />
<br />
if (nVirtKey >= VK_PRIOR && nVirtKey <= VK_HELP){<br />
nScanCode |= 0x01000000;<br />
}<br />
<br />
HTH,<br />
<br />
K.<br />
::GetKeyNameText (nScanCode, szBuffer, BUFFER_LEN);
Angels banished from heaven have no choice but to become demons
Cowboy Bebop
|
|
|
|
|
Thanks this works, but I can oneastly say I have no idea how it all works
Sorry, but could you explain exactly what the "<<16 | 0x1;" and "nScanCode |= 0x01000000;" part does?
Aidman » over and out
|
|
|
|
|
The GeyKeyNameText takes as first parameter lParam.
MSDN says:
lParam
[in] Specifies the second parameter of the keyboard message (such as WM_KEYDOWN) to be processed. The function interprets the following portions of lParam.
Bits Meaning
16–23 Scan code.
24 Extended-key flag. Distinguishes some keys on an enhanced keyboard.
25 "Don't care" bit. The application calling this function sets this bit to indicate that the function should not distinguish between left and right CTRL and SHIFT keys, for example.
the operation <<16 (shifting 16 bits to the left) sets the bits 16 to 23. The operation |= 0x01000000 sets the extendey key flag, the bit 24.
If you look in MSDN to the description of WM_KEYDOWN, you'll see that the bits 0 to 15 are used to set the repeat count. Here it's done with the |0x1
This last operation is probably useless, 'cause it should not be interpreted by GetKeyNameText.
HTH,
K.
Angels banished from heaven have no choice but to become demons
Cowboy Bebop
|
|
|
|
|
Ok thank you for you help it is great, I think I got parts of it figuerd. But I don't completly understand the bit shifting operation and the "|=" operation. Do you know any other good examples or articales/tutorials on this type of operations? And what is this type of operations called?
Aidman » over and out
|
|
|
|
|
These operators are standard C operators. You should find all the info about them in MSDN
(note: a |= b <=> a = a | b , as i += j <=> i = i + j )
Angels banished from heaven have no choice but to become demons
Cowboy Bebop
|
|
|
|
|
Hello, I'm making some changes to a Win32 app that is programmed in standard C (meaning no MFC). I'd like to handle the WM_NCHITTEST in a Dialog Box procedure, but am not sure how to indicate to the OS a result code I'd normally send back in a standard WindowProc.
For example, in a standard WndProc, you return an LRESULT. So, if I wanted to let's say add a sizing grip to the lower right corner of a window, I would need to do something like this:
case WM_NCHITTEST:
if (Mouse Cursor is in lower right 16x16 rectangle of window)
return HTBOTTOMRIGHT;
else
DefWindowProc(etc...);
How does one handle this message properly in a Dialog Proc though, since you can't return an LRESULT?
Thanks,
-Sil
|
|
|
|
|
|
Nish, worked like a champ. Thanks much!
-Sil
|
|
|
|
|
Hi
I'm a beginner in VC.
I created a CObject-derived class (CGraphPlotter below).One of its functions create an CFrameWnd object, draw something and then try to display it on the frame.Below is the extract..
But it runs into exception error and i think the problem lies with ShowWindow().I don't know what to do.Invalidate doesnt work too.Can anyone help?Thks.
void CGraphPlotter::CreatePlot(CString title)<br />
{<br />
RECT rect;<br />
POINT pt;<br />
RECT windowSize;<br />
<br />
CFrameWnd *pwndPlot = new CFrameWnd;<br />
<br />
windowSize.left = 0;<br />
windowSize.top = 0;<br />
windowSize.bottom = 300;<br />
windowSize.right = 600;<br />
<br />
pwndPlot->Create(NULL,title,WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX,windowSize,NULL,NULL,0,NULL);<br />
<br />
pwndPlot->GetClientRect(&rect);<br />
pt.x=rect.right;<br />
pt.y=rect.bottom;<br />
<br />
CPaintDC dc(pwndPlot);<br />
CPen plotPen;<br />
CPen *pOldPen;<br />
POINT pt;<br />
<br />
plotPen.CreatePen(PS_SOLID,0,RGB(200,0,0));<br />
pOldPen=dc.SelectObject(&plotPen);<br />
<br />
double m_sampleData[5];<br />
int m_sampleXAxis[5];<br />
<br />
dc.MoveTo(0,0);<br />
for(int i=0;i<4;i++)<br />
{<br />
pt.x=m_sampleXAxis[i];<br />
pt.y = m_sampleData[i];<br />
dc.LineTo(pt);<br />
}<br />
<br />
pwndPlot->ShowWindow(SW_SHOW);<br />
}
|
|
|
|
|
you have to write the painting code in OnDraw.
If you write before, the next time the window paints, whatever you did will get erased.
To do that, you have to create a class CPlotterWnd derived from CFrameWnd and override the OnDraw... although drawing in a frame window is not eh correct way. Framewindow is used to host other windows like views, which inturn display the data.
If you have access to MSDN, it explains it quite well. .. or you have to get a book on MFC.
My article on a reference-counted smart pointer that supports polymorphic objects and raw pointers
modified 29-Aug-18 21:01pm.
|
|
|
|
|
I've gone and read up on MSDN.I understood the concept much better and i hope to use the correct way.
My application is a SDI and i want to display a graph in the CPlotterWnd(CFrameWnd-derived). Am i right to interpret that i should probably derive CGraphPlotter from CView instead? And to associate them together, can i CREATE CPlotterWnd in CGraphPlotter?
thks
|
|
|
|
|
yes. you are better off creating a view for that. If that is the only view that you want, implement your graph plotting in the default view. But, if you want multiple views that look different from the same data, you can create multiple view classes. MSDN has some doumentation on using multiple view types with SDI applications.
Or you can create another view class, host it inside another frame derived class... and create the framewindow, when you click a menu item or a toolbar button. This way, you can create multiple windows showing the same data in different display formats. But, read up on the multiple view handling on SDI before you go out and implement it this way.
My article on a reference-counted smart pointer that supports polymorphic objects and raw pointers
modified 29-Aug-18 21:01pm.
|
|
|
|
|
I have a huge memory leak. I have found that the offending line of code is this one. I comment this part and the leak goes away. The leak is big enough for Windows to say that it is low on virtual memory on a 512 MB machine! m_hdr is a class derived from CHeaderCtrl. There is an image list associated with the header control that has 7 images. The variable direction can be only 0 or 1.
Not being particularly great at MFC UI controls, I copied this from MFC, except for the part where I derive the image index.
HDITEM curItem;<br />
m_hdr.GetItem(column, &curItem);<br />
curItem.mask= HDI_IMAGE | HDI_FORMAT;<br />
curItem.iImage = (sortindex > 3) ? 0 : ((sortindex * 2 + direction) + 1) ;<br />
curItem.fmt= HDF_LEFT | HDF_IMAGE | HDF_STRING;<br />
m_hdr.SetItem(column, &curItem);
My article on a reference-counted smart pointer that supports polymorphic objects and raw pointers
modified 29-Aug-18 21:01pm.
|
|
|
|