|
|
Hi,
Am developing MFC application. I faced one problem in dialogbar. I can't add a tooltip for TopToolBar's and statbar's buttons. anyone know please help me.
CSysWindow.h
class CSysWindow : public CDialogBar
{
}
CSysWindow.h
CMainfrm.h
class CMainFrame : public CMDIFrameWnd
{
DECLARE_DYNAMIC(CMainFrame)
public:
CMainFrame();
CSysWindow m_TopToolBar;
CSysWindow m_StatBar;
}
|
|
|
|
|
|
Hello,
ENVIRONMENT: MFC
I seek help regarding the dynamic creation and use of Spin Button Controls.
Every example/tutorial I've found provides a lot of information, all of which I already know.
They all state the obvious, and avoid addressing the only non-obvious (at least to me) aspect.
When dealing with a statically created (or a single dynamically created) control, "up" and "down" messages are generally handled by a method of the spin button's parent window, having a prototype such as:
void Dlg::OnDeltaposSpinFoo(NMHDR* pNMHDR, LRESULT* pResult)
{
}
The NMHDR* parm can be type cast to an NMUPDOWN*, which provides data specific to a Spin Button Control.
The message map for the parent window contains an entry such as:
ON_NOTIFY(UDN_DELTAPOS, IDC_SPIN_ADJUST_FOO, OnDeltaposSpinFoo)
In such a case, it's obvious which spin control has been clicked, since the method is invoked for only a single control.
Suppose I want a range of ID's to be associated with OnDeltaposSpinFoo()?
Say I dynamically create a number of spin controls on a window, for which I wish to use a single message handler.
For some controls, such as buttons, there are "range" macros that may be placed in the message map.
How about for a spin button control?
If I could manage to have OnDeltaposSpinFoo() called for a range of ID's, I could identify the control by the idFrom member of the NMHDR parm (see structures below). I'd probably subtract a base value from the idFrom value to obtain an index to be used programmatically).
[
The relevant structures are:
typedef struct tagNMHDR {
HWND hwndFrom;
UINT_PTR idFrom;
UINT code;
} NMHDR;
typedef struct _NM_UPDOWN {
NMHDR hdr;
int iPos;
int iDelta;
} NMUPDOWN, *LPNMUPDOWN;
]
The bottom-line questions are:
1) How can I place an entry in the message map that will cause a "spin button prototype" function to be called (with an NMUPDOWN*) for a range of control ID's?
2) If that's not possible, how else can I handle the problem?
I'd appreciate suggestions.
Even more, I'd appreciate a working example project that will build and run using Visual Studio 2008 (I don't expect anyone to spend a lot of time creating one, but if you have one, or can quickly create one
from something you have....).
|
|
|
|
|
|
Thank you for your feedback.
The range macros of which I was aware were: ON_COMMAND_RANGE, and ON_CONTROL_RANGE, neither of which matched the function prototype I normally use for a spin button control.
The ON_NOTIFY_RANGE worked great. However, I did have to add an ID parameter to the message handling function.
[The first parameter, in case anyone is interested.]
Due to the additional parameter, one need not use the mentioned structure members to identify the control.
|
|
|
|
|
I am trying to use the "OnDraw" message to respond to the left mouse button click. The "Button Up" triggers ->Invalidate(TRUE); and -> UpdateWindow(); which then calls "OnDraw".
Once "OnDraw" is called, a long series of graphics functions are used to draw what I want to display, using the DC supplied by "OnDraw". This all works and draws what I want, however:
"OnDraw" seems to be called 3 consecutive times, each with a different DC for the same hwnd. This causes the graphics (which don't change) to be calculated and drawn 3 times producing an annoying flicker and waste of application processing time.
Is there a way to get just one call to "OnDraw"? WM_PAINT seems to also be sent 3 times. Any suggestions to different methods or approaches will be welcome.
Thanks and Happy Thanksgiving to those who celebrate.
Barry
|
|
|
|
|
You should not be calling UpdateWindow after Invalidate . The Invalidate call is enough to trigger the redrawing.
Veni, vidi, abiit domum
|
|
|
|
|
This solved the problem. Thanks.
Just under what conditions would one call ->UpdateWindow?
Barry
|
|
|
|
|
The documentation[^] explains what the function does, and suggests that it should be called immediately after a Window is created. This has always been my understanding, and the remainder of the time you just use InvalidateRect or InvalidateRgn to queue the redrawing messages.
Veni, vidi, abiit domum
|
|
|
|
|
First, the problem: I have a template class (Foo) that will have a friend operator + that takes type T as the first parameter, and type Foo<T> as the second. The forward declaration is:
template<class T> struct Foo;
template<class T> Foo<T> operator +(T const a1, Foo<T> const &a2);
I am using Visual Studio 2010 Pro. Doing a search resulted in the following two links that I thought would be helpful:
http://www.parashift.com/c++-faq-lite/template-friends.html[^]
http://publib.boulder.ibm.com/infocenter/lnxpcomp/v7v91/index.jsp?topic=/com.ibm.vacpp7l.doc/language/ref/clrc16friends_and_templates.htm[^]
These recommendations lead me to try the following after the above forward declaration:
template<class T = double>
struct Foo {
private:
T m_Data;
friend Foo<T> operator +(T const a1, Foo<T> const &a2);
friend Foo<T> operator + <>(T const a1, Foo<T> const &a2);
friend Foo<T> operator + <T>(T const a1, Foo<T> const &a2);
template<>
friend Foo<T> operator +(T const a1, Foo<T> const &a2);
public:
Foo operator +(T const addend);
};
template<class T>
Foo<T> operator +(T const a1, Foo<T> const &a2) {
return (a2 + a1);
}
Is there some way to accomplish this? It works if I define (implement) the method within the class declaration, but I prefer to define the method body with the other method declarations (in an included cpp file) for consitency and cleanliness. Thanks,
Sounds like somebody's got a case of the Mondays
-Jeff
|
|
|
|
|
I think you need to explicitely add an inline to the declaration as well as the definition. We had a similar problem with a derived template class and solved it that way.
The good thing about pessimism is, that you are always either right or pleasently surprised.
|
|
|
|
|
Unfortunately, marking the declarations inline had no noticeable effect. Thanks for the suggestion, though.
Sounds like somebody's got a case of the Mondays
-Jeff
|
|
|
|
|
Here's something that worked for me:
template <class BaseType>
class iReadContainer
{
template <class> friend bool operator== (const iReadContainer<BaseType>& one, const iReadContainer<BaseType>& other);
};
P.S.: In previous versions of VS this didnt work either. back then I used to declare a friend helper class in such cases, e. g. :
template <class T>
class vec3 {
T val[3];
public:
...
friend class vec3_operator_helper; };
class vec3_operator_helper {
public:
template <class T> static
vec3<T> add (const vec3<T>& v1, const vec3<T>& v2); };
template <class T>
vec3<T> operator+(const vec3<T>& v1, const vec3<T>& v2);
template <class T>
vec3<T> operator+(const vec3<T>& v1, const vec3<T>& v2) {
return vec3_operator_helper::add(v1, v2);
}
GOTOs are a bit like wire coat hangers: they tend to breed in the darkness, such that where there once were few, eventually there are many, and the program's architecture collapses beneath them. (Fran Poretto)
modified 28-Nov-13 5:49am.
|
|
|
|
|
Unfortunately, your first recommendation didn't work for me. However, I was also getting intellisense errors when building with the method definition within the declaration. Adding
template<class> prior to the definition prevented those errors from appearing. Note that intellisense errors do not prevent code from successfully compiling.
I am sure your second recomendation would work, but it is a bit verbose for what I am attempting to accomplish, so I decided to move the definitions into the header file. Thanks,
Sounds like somebody's got a case of the Mondays
-Jeff
|
|
|
|
|
Hmm, that's odd, I also use VS 2010. I don't use Intellisense though, since I've installed VisualAssist X which works a lot better and is less intrusive.
I agree that my second suggestion is rather awkward, but I used it anyway because there were a lot of operators to declare in that particular case! It's probably not worth it if you only have two or three ...
GOTOs are a bit like wire coat hangers: they tend to breed in the darkness, such that where there once were few, eventually there are many, and the program's architecture collapses beneath them. (Fran Poretto)
|
|
|
|
|
WIN32_FIND_DATAA data;
HANDLE h = FindFirstFile(".\\images\\*?*",&data);
This is returning a INVALID_HANDLE_VALUE handler. in Window XP while in Windows 7 it is working fine.
In XP if you will run this use case it will work.
but after doing another some use case and then will run it it will give exception.
|
|
|
|
|
In case of errors call GetLastError() to know about the reason of the failure. To get the corresponding error message use FormatMessage() . When not using FormatMessage() you can lookup the error number in WinError.h to get the english error message.
Don't forget to close the returned handle using FindClose() when a search operation has been finished.
|
|
|
|
|
|
"*?* " is the same as "* " under Win-XP at least. Did you hope for something else?
Gisle V.
# rm -vf /bin/laden
/bin/rm: success
|
|
|
|
|
Check what the current directory is.
|
|
|
|
|
sachanratnesh wrote: HANDLE h = FindFirstFile(".\\images\\*?*",&data); Are you confusing relative vs. absolute paths? Since you are using the former, does the "images" folder exist in the same folder as the exe that is running?
"One man's wage rise is another man's price increase." - Harold Wilson
"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
"Show me a community that obeys the Ten Commandments and I'll show you a less crowded prison system." - Anonymous
|
|
|
|
|
Hello,
What I am looking for:
A Front end basically . I would like a C++ API for plotting numerical results in browser window or an API for plotting numerical results and creating the GUI.
I currently have 3 applications talking to one another:
1. Embedded code backend writen in C/C++, talks to microcontroller over a USB-Serial Port, downsamples, labels and sends the data to the front end over TCP Sockets.
2. Numerical Simulator written in C++, sending calculations to front end over a JNI Interface.
3. Java front end writing to a database, displaying received data as graphs using plot utilities.
I would very much like to do away with the Java front end and use a simple utility for plotting. My criteria for the plotting in order of importance:
1. Plot both Time scale data and flash relevant values like you would see on a ICU screen.
2. Plot at least every 100ms, data is generated every 1 - 10 ms.
3. Easy to understand and implement. I am not much of a GUI/graphics programmer, my time is mostly spent on numerical simulations .
4. Nice if I could move to browser based plotting, easier portability in our lab environment.
I use minGW and work in cygwin/windows.
Thanks and Regards,
kpks
modified 28-Nov-13 1:04am.
|
|
|
|
|
And? What is your question/request?
The difficult we do right away...
...the impossible takes slightly longer.
|
|
|
|
|
To put it very very succinctly, I am looking for an API in C++ to replace the GUI Developed in ECLIPSE and the plotting accomplished with Chart2D / LiveGraph in JAVA
|
|
|
|