|
If you're making a change to something both views will see, then you should be making that change in the document, and use UpdateAllViews to "tell" the views that something has changed and they should do something about it.
If you're adding / removing views, then neither the view(s) or the document are the right place to do that. I'd suggest the frame holding the views, either the CChildFrame or CMainFrame (for SDI) would be the right place to handle any "add a new view", "kill a view", "change a view" message.
UpdateAllViews is *not* the place to be murdering Views in their sleep.
I hope that helps,
Iain.
I have now moved to Sweden for love (awwww).
If you're in Scandinavia and want an MVP on the payroll (or happy with a remote worker), or need cotract work done, give me a job! http://cv.imcsoft.co.uk/[ ^]
|
|
|
|
|
Hi,
I need to filter the list of files in a CBCGPListCtrl by extension.The problem is like this :
I have a CBCGPShellTree and CBCGPListCtrl, I'm succeed to display the list of files related to item selected in the tree .But i want to display only files which has a specific extension i.e udl.
So can you help me please.
Thank you
modified on Friday, September 25, 2009 4:11 AM
|
|
|
|
|
|
Hi
a quick question
if I allocate a cdialog derived object via
the new operator
just so I can save data in the object
that won't associate with windows resource
until I do the create specfing the dialog item
from the resource file
after the create. The framework should call
my ::initdialog overideable
sounds right ??
Btw in the create is where I would specify
the dialog item resource
|
|
|
|
|
ForNow wrote: if I allocate a cdialog derived object via
the new operator
just so I can save data in the object
Just for the sake of saving data, why would you want to do this?
ForNow wrote: that won't associate with windows resource
until I do the create specfing the dialog item
from the resource file
after the create. The framework should call
my ::initdialog overideable
Wouldn't it be easier to just code it up and see (when OnInitDialog() is called)?
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
I have two threads providing information
for the dialog
which ever finishes first I'll save that info
in a Cstring member of the CDialog derived
object
When the second thread finishes and I'am
ready to display the Cdialog I'll do the
Create to get things going
Thank
|
|
|
|
|
Ok, but why use a heap-based CDialog object?
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
Since I need this storage while the Cdialog
exists it seems like a good place to save the
Data
|
|
|
|
|
Saving the data in the dialog object is fine. I'm just curious why you think it needs to be heap-based. Are you creating it in one place and then doing the thread-related code elsewhere?
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
I just if I Created it on the I guess stack
e.g. Cdialog mydialog then
1) I would have to pass the Cdialog constructed
paramters such as the dialog resource item
to initialize the windows object
2) the CDialog objects would be lost between
the windows/framwork messages
waiting for the second thread to complete
with the rest of the data
thankx
|
|
|
|
|
ForNow wrote: 1) I would have to pass the Cdialog constructed
paramters such as the dialog resource item
to initialize the windows object
2) the CDialog objects would be lost between
the windows/framwork messages
What does this mean?
Consider these two statements:
CMyDialog dlg;
dlg.DoModal(); The dialog window itself and any controls on it do not exist until DoModal() is called, so you can access non-UI member variables of the dialog object until the object goes out of scope.
I'm not saying you have to do it this way, I was just questioning why you thought you had to do it the other way. Either way works, one just unnecessarily involves the memory manager.
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
I am using a modeless dialog box
so Create I guess attaches the MFC
object to to the Windows Dialog
I also need the storage of the CDialog
saved between Windows messages
If I save the address of dlg in a CDialog *
would be around (the storage area of dlg)
between Windows messages????
Thankx again
|
|
|
|
|
I know this isn't strictly a C++ problem but the application in question is written in C++ and this seems to be as good a place as any for some genius to come across this and answer it!
OK, I have this puzzle that's been driving me crazy for over a week. Perhaps if I explain it to you someone can help me to crack it!
I'm trying to replicated the behaviour of some software. It's a digital signage system and consists of a server application running, at the moment, on my PC, and a client which is a giant LCD screen with a built-in PC running Windows XP Embedded. In case anyone's familiar with it the sofware is MagicInfo by Samsung.
The server application has the option to create an alert ticker message. It can be formatted, colours selected, etc. And when it's ready you hit the 'Send' button in the server console and instantly the message appears on the remote client screen. It'll keep running for the length of time I specified in the message setup or I can stop it by pressing the 'Stop' button in the server console.
I've determined that the message itself and its formatting is contained in a simple XML file, which I'll paste below. Every time I update the message in the server the XML file on the client is updated. So, it's simple for me to come up with my own way to change the message.
The hard part is how to trigger the display of the message. Remember, it can't be scheduled, it only appears when that 'Send' button is pressed. I have searched high and low on the client for SOMEWHERE that might store the on/off flag, or SOME indication of what changes when the message is activated.
Getting in a bit over my head I've used network sniffer programs to examine the data packets sent between the server and the client when the message is activated and, sure enough, I can see the text of the updated message being sent. The client is permanently running a little application called XL_TICKER which seems to just sit there and wait for these packets from the server. However, attempting to replicate the packets manually with my limited knowledge has thus far failed to trigger the message on the client.
So here's the puzzle. The ONLY thing that appears to change on the client each time I trigger the message (other than the XML file itself) is an entry in the Windows Registry, in a node containing various details about MagicInfo. There are two keys, called TickerStartTimeHigh and TickerStartTimeLow. These are DWORD values. The latter, TickerStartTimeLow, changes every time I trigger the ticker message. The other one only changes sometimes. I'm desperately hoping that somehow the client checks these values continually and, depending on what the values are, displays the message. I know it's a long shot but since I can find nothing else on the client that changes with the triggering of the ticker message I've got nothing else to go on.
The problem is that the values in these keys make no sense at all. I don't even know why there would be a HIGH and a LOW start time. Here are some examples of the values in the keys. If anybody can work out how these relate to time or, indeed, what they mean, I'd be eternally grateful!
Link to table of DWORD values at various times
I know it looks as if the TickerStartTimeHigh might simply be an incremental value, going up one each time, but sometimes it doesn't change from one triggering of the message to the next. It does, however, seem to go up by very small amounts over time, whereas TickerStartTimeLow leaps up by thousands, then all of a sudden drops by thousands, as if it's reaches a maximum and started again (although only rises are seen in the data above). I can only assume that the actual time or significant value is a derivation of the two numbers, but again - why store it in this way?
FWIW, here's the text of the XML file for the ticker:
<?xml version="1.0" encoding="utf-8"?>
<root>
<Ticker>
<Text>The text of the message goes here</Text>
</Ticker>
<Time>00:02:00</Time>
<BottomPosition>True</BottomPosition>
<Direction>Right To Left</Direction>
<Speed>95</Speed>
<Step>1</Step>
<Font>Arial</Font>
<Size>70</Size>
<Italic>False</Italic>
<Bold>True</Bold>
<UnderLine>False</UnderLine>
<Strikeout>False</Strikeout>
<HLocation>Center</HLocation>
<TextColor>16777215</TextColor>
<BackgroundColor>255</BackgroundColor>
<Transparency>100</Transparency>
</root>
|
|
|
|
|
The time is a FILETIME[^]. In fact, here's a little program that confirms that by using one of the times you give in your link, assigning it to a FILETIME and converting that to a SYSTEMTIME and writing out the time parts.
#include <Windows.h>
#include <iostream>
int main()
{
SYSTEMTIME st;
FILETIME ft;
ft.dwLowDateTime = 2960830672;
ft.dwHighDateTime = 30031143;
FileTimeToSystemTime(&ft, &st);
std::cout << st.wYear << std::endl;
std::cout << st.wMonth << std::endl;
std::cout << st.wDay << std::endl;
std::cout << st.wHour << std::endl;
std::cout << st.wMinute << std::endl;
std::cout << st.wSecond << std::endl;
}
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
Thanks Stuart, I'm so grateful that you were able to crack that one! Your code looks tantalisingly simple, but unfortunately I don't know C(++) at all and don't have anything to compile it with. I know VB.NET, though, and in fact that's what I'm using to write the program I'm hoping to incorporate this into. I've spent most of today Googling FileTime and SystemTime, creating my own structures in VB.NET and trying to achieve the feat of extracting the parts of the date as you have, but so far without success. At the moment it's returning a year of "67137" and a month of "65537", which seem completely meaningless to me and suggest that I've totally misunderstood what I'm doing and have just got lucky and managed to compile some code which will actually run, however pointless!
I don't suppose you know how to achieve what your code does in VB.NET, do you?
|
|
|
|
|
I'd start with Pinvoke.net[^], as that contains code snippets for declaring the necessary structures and function declarations.
Once you've got those definitions in your code, the VB.NET code should follow logically form the C++ code - all I do is set the FILETIME structure to your time parts, call FileTimeToSystemTime and extract the date/time parts.
This page[^] might also help.
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
I've already been on Pinvoke.net and it seems that I have my structures and functions declared correctly. At the moment, using the same figures you plugged into your C code, I'm getting a year of "67137", a month of "65537" and a day of "5439544", without going into the hours, etc. Am I completely on the wrong track or are these numbers correct and just in need of some kind of further conversion to a date I an actually understand?
|
|
|
|
|
Imports System
Imports System.Runtime.InteropServices
Module Module1
<StructLayout(LayoutKind.Sequential)> _
Public Structure FILETIME
Public dwLowDateTime As UInteger
Public dwHighDateTime As UInteger
Public ReadOnly Property Value() As ULong
Get
Return CType(dwHighDateTime << 32, ULong) + dwLowDateTime
End Get
End Property
End Structure
<StructLayout(LayoutKind.Sequential)> _
Public Structure SYSTEMTIME
<MarshalAs(UnmanagedType.U2)> Public Year As Short
<MarshalAs(UnmanagedType.U2)> Public Month As Short
<MarshalAs(UnmanagedType.U2)> Public DayOfWeek As Short
<MarshalAs(UnmanagedType.U2)> Public Day As Short
<MarshalAs(UnmanagedType.U2)> Public Hour As Short
<MarshalAs(UnmanagedType.U2)> Public Minute As Short
<MarshalAs(UnmanagedType.U2)> Public Second As Short
<MarshalAs(UnmanagedType.U2)> Public Milliseconds As Short
End Structure
<DllImport( _
"kernel32.dll", _
CharSet:=CharSet.Auto, _
SetLastError:=True)> _
Public Function FileTimeToSystemTime( _
<[In]()> ByRef lpFileTime As FILETIME, _
<Out()> ByRef lpSystemTime As SYSTEMTIME) _
As Boolean
End Function
Sub Main()
Dim st As SYSTEMTIME
Dim ft As FILETIME
ft.dwLowDateTime = 2960830672
ft.dwHighDateTime = 30031143
FileTimeToSystemTime(ft, st)
System.Console.WriteLine(st.Year)
System.Console.WriteLine(st.Month)
System.Console.WriteLine(st.Day)
System.Console.WriteLine(st.Hour)
System.Console.WriteLine(st.Minute)
System.Console.WriteLine(st.Second)
End Sub
End Module
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
That is fantastic, thank you so much for taking the time. Your code worked perfectly for me and I've been able to extrapolate from that how to convert in the other direction too. I was very close to the code you've written, I'm not exactly sure where I was going wrong, but I don't care any more! Thanks again.
|
|
|
|
|
We're in the middle of a process to convert a VC6 prject to VS2008/MFC Feature Pack. So far, things have come along if not nicely, at least acceptably.
We've lifted a lot of dialogs and TabViews into customized CDockablePanes and most of it's been straightforward. We ran into trouble, though, when we had a Combo box that the user is able to enter text into occupying a grandchild. Unfortunately, some of our doc types have plenty of accelerators, many of the occupying the SHIFT-[A-Z] range. Needless to say, it's more than mildly irritating not only being unable to write "SELECT" but on top of that, a for thr moment totally irrelevant dialog pops up.
My question is:
How can I intercept accelerator translation for the select children? I understand that I sacrifice being able to do CTRL-S while mucking about with some details in a pane but that is OK.
The best solution would be to have the children/CDockablePanes use a totally different accelerator table, one that only has common accelerators like save, new, close etc. Is that at all possible?
Grey-haired regards,
Dan
|
|
|
|
|
Hey Guys,
I'm working on a simulation project that involves writing a highly accurate vehicle dynamics simulator. I'm writing the project using MFC/C++ and I'm using Visual Studio 2008. I've hit a bit of a block so I figured I would turn to the wisdom contained in this community.
1) I need to use a number of square root calculations. Would anyone happen to know a really fast square root algorithm in Visual Studio 2008 using C/C++. In my case I would be feeding it doubles.
2) I've read quite a bit about SSE Intrinsics, but apart from limited examples I haven't found a good source to say, let's do it this way or this is how you implement it. I've written the numerical engine using double varaibles, so does anyone have some tips about how do I go about converting doubles to the SSE Intrinsics.
Many Thanks
Danny
|
|
|
|
|
Have you looked at this[^] article?
|
|
|
|
|
The best answer to this is to use very strange and dangerous magic, as described here. (This is for floats, but it should be expandable to doubles easily enough.)
It's usually attributed to John Carmack, although I don't know if he came up with it, or got it from somewhere else.
PS - there's even a Wikipedia article on it!!
There are three kinds of people in the world - those who can count and those who can't...
|
|
|
|
|
One "trick" I have resorted to in the past is to minimize if not remove the use of square roots. There are some calculations where it is unavoidable but in many there are alternatives. For example, in computing distances like for finding closest objects don't compare with the actual distance but use the distance squared because actual distance requires a square root.
|
|
|
|
|
Hi,
is you application already using MMX/SSE code? is it vectorized at all?
if not, it won't make sense to use SSE just to get a square root; you would have to get the data in and out the vector processor, which would forego all the speed gain you might achieve.
So just apply regular optimization on doubles. Some of these have already been mentioned:
- avoid SQRT; don't use it when it isn't necessary.
- use an approximation, if that is acceptable.
- for the range of numbers you're interested in, find a fast way (often a polynomial, or something smart, sometimes called "magic").
- if you need SQRT on a series of related numbers, try using each result as the initial estimate for the next.
Luc Pattyn
Local announcement (Antwerp region): Lange Wapper? Neen!
|
|
|
|
|