|
Hi,
Somewhere in your implementation file for your view class you should see a horrific looking block of macros. It'll look something like:
BEGIN_MESSAGE_MAP(CMFC_testView, CView)
ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CView::OnFilePrintPreview)
ON_WM_KEYDOWN()
END_MESSAGE_MAP()
Has your block of macros got the line ON_WM_KEYDOWN() in it? If it hasn't then try sticking it in and seeing if the code starts magically working.
If it doesn't work then perhaps a session of delving into how MFC routes messages might be in order. Paul DiLascia wrote a decent article on it years ago for MSJ ("Meandering Through the Maze of MFC Message and Command Routing" http://www.microsoft.com/msj/0795/dilascia/dilascia.aspx[^]) about it and tells you why you need all those funky macros and why message handlers aren't virtual.
Hope that helps,
Cheers,
Ash
|
|
|
|
|
hi,
thank you for your answer, I've checked and found it in my code,
IMPLEMENT_DYNCREATE(CTest9View, CRecordView)
BEGIN_MESSAGE_MAP(CTest9View, CRecordView)
//{{AFX_MSG_MAP(CTest9View)
ON_WM_KEYDOWN()
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CRecordView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CRecordView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CRecordView::OnFilePrintPreview)
END_MESSAGE_MAP()
However, it still not work. I met this problem when i studied with dialoge, and solved it with PretranslateMessage.
BOOL CTimerver2Dlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if (pMsg->message == WM_KEYDOWN)
{
SendMessage(WM_KEYDOWN, pMsg->wParam, pMsg->lParam);
}
if (pMsg->message == WM_KEYUP)
{
SendMessage(WM_KEYUP, pMsg->wParam, pMsg->lParam);
}
return CDialog::PreTranslateMessage(pMsg);
}
I've tried it in this SDI, but nothing happen.
I'm just a newbie in VSC, any way to do it?
Thanks for your links, i'll try to learn it.
best regards,
dnqhung
dnqhung
|
|
|
|
|
Hi again,
I've never used CRecordView so I'm probably not going to be a lot of help, however if you try deriving your class from CView instead does it start working? Or rather does the handler function get called, it won't do exactly what you want as it won't be derived from CRecordView. If it does then something in CRecordView is probably eating the message.
If you're feeling masochistic you could try stepping through the MFC source code to see where the message gets sent. One thing you could try is overiding PreTranslate message and use it as somewhere to stick a breakpoint in, e.g:
BOOL "your view class name"::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN)
{
__asm int 0x03;
}
return CDialog::PreTranslateMessage(pMsg);
}
This hardcodes a breakpoint whenever a WM_KEYDOWN comes flying past PreTranslateMessage. You can then follow where the message goes and see if there's another control or window that eats the message.
Cheers,
Ash
PS: __asm int 0x03; is not the official Microsoft way of breaking into the debugger - being lazy and a recovering assembly language programmer it's the method I use. I think the official way is to call (from memory) DebugBreak();
|
|
|
|
|
Dear sir,
thank you for your help. Your answer was very useful for me. I now know where the message come to. The static text in the dialog has eaten it. However, i still need to learn hard to understand the Message in window. Sometime i don't no where it go
thank you,
best regards,
dnqhung
dnqhung
|
|
|
|
|
I call LoadLibrary in my program to call up a 3rd party DLL which in turn runs some EXE.
I want to know the version info of this external EXE in my C++ program so I can decide whether to issue a particular command to the loaded DLL. Is there a way to do this?
I think I can get the path to the EXE from the registry, and of course, I know the name of the EXE.
If I don't check the version and send the command blindly, some quite nasty and inconvenient things happen (the hardware I'm trying to control with my program goes a bit nuts). I can ask the user to check the version of all the bits and pieces of software they have installed on their PC before running my program, but human error isn't always avoidable. I need an automatic way of ensuring that certain commands are NOT issued so that the operator doesn't have to spend an hour recovering the hardware from a limbo state.
Any help greatly appreciated.
Almost, but not quite, entirely unlike... me...
modified on Tuesday, May 18, 2010 2:50 AM
|
|
|
|
|
|
Of course! Why didn't I think of that!?
Thanks, you saved me a heck of a lot of time!
Almost, but not quite, entirely unlike... me...
|
|
|
|
|
Hi All,
My problem is that the code no longer works under Windows 7/Vista when
called from within the limited user account. CreateFileMapping()
routine returns ERROR_ACCESS_DENIED (code 5) upon attempt to create
the file mapping object in global namespace.
I've searched the web and discovered that from Vista onwards,
Microsoft has changed the policy that affects who will be granted to
obtain SeCreateGlobalPrivilege and that is it impossible for any code
called from within the limited user account to create global objects.
Does anyone know how to work around this limitation? Any pointers on
how to make this code compatible with Windows 7/Vista would be highly
appreciated.
Thanks & Regards,
Uday.
|
|
|
|
|
What type of program are your code in? normal application or service?
A service has the highest permission.
If you put your code in a service, there won't be error, i think.
|
|
|
|
|
You need to run your application under an enhanced security level; see here[^] for some suggestions.
It's time for a new signature.
|
|
|
|
|
i want find a audio chat source
|
|
|
|
|
Don't we all... I'd suggest Google would be a good place to start.
Steve
|
|
|
|
|
Please read this[^] before posting.
|
|
|
|
|
699 wrote: i want find a audio chat source
In other words are you searching for a 'somebody using microphone for speaking'?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
Hey Everyone. I have been having linking problem with visual studio. My Problem basically is I do not know how to set it up. What I have been doing is just making one ".hpp" file with multiple classes/preprocessors in it and separate ".cpp" files for the classes and a test file, but I have a strong suspicion this is not the way one is suppose to do this. Maybe I am just going about it wrong as well, here is the latest inheritance I have been working on and cannot seems to get working.
this files called: geo.hpp
#ifndef COORD_HPP
#define COORD_HPP
#include <iostream>
namespace Geo
{
class Coord
{
private:
int x;
int y;
public:
Coord() : x(0), y(0)
{
}
Coord(int newx, int newy) : x(newx), y(newy)
{
}
Coord operator + (const Coord&) const;
Coord operator - () const;
void operator += (const Coord&);
void printOn(std::ostream& strm) const;
};
inline Coord Coord::operator + (const Coord& p) const
{
return Coord(x+p.x, y+p.y);
}
inline Coord Coord::operator -() const
{
return Coord(-x, -y);
}
inline void Coord::printOn(std::ostream& strm) const
{
strm << '(' << x << ',' << y << ')';
}
inline std::ostream& operator << (std::ostream& strm, const Coord& p)
{
p.printOn(strm);
return strm;
}
}
#endif //COORD_HPP
#ifndef GEOOBJ_HPP
#define GEOOBJ_HPP
#include "geo.hpp"
namespace Geo
{
class GeoObj
{
protected:
Coord refpoint;
GeoObj(const Coord& p) : refpoint(p)
{
}
public:
virtual void move(const Coord& offset)
{
refpoint += offset;
}
virtual void draw() const = 0;
virtual ~GeoObj()
{
}
};
}
#endif //GEOOBJ_HPP
#ifndef CIRCLE_HPP
#define CIRCLE_HPP
#include <iostream>
#include "geo.hpp"
namespace Geo
{
class Circle : public GeoObj
{
protected:
unsigned radius;
public:
Circle(const Coord& m, unsigned r)
: GeoObj (m), radius(r)
{
}
virtual void draw() const;
virtual ~Circle()
{
}
};
inline void Circle::draw() const
{
std::cout << "Circle around center point " << refpoint << " with radius " << radius << std::endl;
}
}
#endif //end CIRCLE_HPP
#ifndef LINE_HPP
#define LINE_HPP
#include <iostream>
#include "geo.hpp"
namespace Geo
{
class Line : public GeoObj
{
protected:
Coord p2;
public:
Line(const Coord& a, const Coord& b)
:GeoObj(a), p2(b)
{
}
virtual void draw() const;
virtual void move(const Coord&);
virtual ~Line()
{
}
};
inline void Line::move(const Coord& offset)
{
refpoint += offset;
p2 += offset;
}
}
#endif //LINE_HPP
and a simple test file.
this file is called :test.cpp
#include "geo.hpp"
void printGeoObj(const Geo::GeoObj&);
int main()
{
Geo::Line l1(Geo::Coord(1,2), Geo::Coord(3,4));
}
So i hope someone can help me arrage these files properly with visual studio 9 c++, or help me figure out what I am doing wrong
Thanks alot!
|
|
|
|
|
You need to create a project and put your files in it. Start with File->New->Project. This will bring a wizard where you can select any different types of project. Of cause, you may start with an 'empty' project where you will require to include all the files, as well as to set compile and link options, or you may start with a pre-defined project of your choice. I reckon, Win32 Console Application will be a good start.
After you've created a project you may start adding hpp and cpp files into it.
|
|
|
|
|
I am aware on how to make a project. I am however having a LNK2019 problem when I make separate .hpp files. The Error I am getting is:
4>geotest1.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall Geo::Line::draw(void)const " (?draw@Line@Geo@@UBEXXZ)
4>geotest1.obj : error LNK2019: unresolved external symbol "public: void __thiscall Geo::Coord::operator+=(class Geo::Coord const &)" (??YCoord@Geo@@QAEXABV01@@Z) referenced in function "public: virtual void __thiscall Geo::GeoObj::move(class Geo::Coord const &)" (?move@GeoObj@Geo@@UAEXABVCoord@2@@Z)
4>C:\Users\Rob\School Work\Information Technology\Computer Programming With C++\Projects\inherit_1\Debug\inherit_4.exe : fatal error LNK1120: 2 unresolved externals
Would You be able To help me figure this out?
EDIT: I am creating a empty project by the way.
Thanks,
RobNO
|
|
|
|
|
I actually realized I had actually not implemented operator += in coord.hpp and also not implemented Line::Draw() in line.hpp.
Thanks for all you time,
RobNO
|
|
|
|
|
Hello
I am a beginner in c(win32 console). I want to define arrow keys in c in order to a character travels up, down, left and right.
PLEASE EXPLAIN AS COMPLETE AS POSSIBLE...
thanks all
|
|
|
|
|
See my answer to your other question.
It's time for a new signature.
|
|
|
|
|
hasani2007 wrote: I want to define arrow keys in c in order to a character travels up, down, left and right.
I could easily give you the numbers, but it would be of more benefit to you to create a little test program that uses getch() to get those keys (and others) and print their values to the screen. You can then use those values in your program.
"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
"Man who follows car will be exhausted." - Confucius
|
|
|
|
|
How to define arrow keys in c.
1. Define keys.
2. Put kbhit() in a function.
3. Create a loop.
4. Thats it.
Step 1.
#define UP 72
#define DOWN 80
#define LEFT 75
#define RIGHT 77
Step 2.
void pumpKeyboardMessages(void)
{
if (kbhit())
{
ch=getch();
}
}
Step 3.
while (ch!=ESCAPE)
{
pumpKeyboardMessages( );
}
Step 4.
Here's an example of usage:
#include <conio.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#define UP 72
#define DOWN 80
#define LEFT 75
#define RIGHT 77
#define SPACE 32
#define ENTER 13
#define ESCAPE 27
#define TAB 9
#define INSERT 82
#define F1 59
void pumpKeyboardMessages(void)
{
if (kbhit())
{
ch=getch();
switch (ch)
{
case LEFT:
break;
case RIGHT:
break;
case UP:
break;
case DOWN:
break;
case ENTER:
break;
case SPACE:
break;
case F1:
break;
case TAB:
break;
}
}
}
int main(void)
{
getReady();
initGame();
bas=time(0)+1;
while (ch!=ESCAPE)
{
pumpKeyboardMessages( );
}
return 0;
}
Also check out my articles about console applications.
How to create a Win32 Console Mode breakout brick game
How to create a Win32 Console Mode breakout brick game
How to create an object oriented Win32 Console application
How to create an object oriented Win32 Console application
How to handle mouse events in a Win32 Console in C++ with Random Joke Generator
How to handle mouse events in a Win32 Console in C++ with Random Joke Generator
|
|
|
|
|
Hi all friends;
I am a beginner in c(win32 console). I want to change the colour of characters & background in c. How to do it?
PLEASE EXPLAIN AS COMPLETE AS POSSIBLE...
Thanks all.
|
|
|
|
|
hasani2007 wrote: PLEASE EXPLAIN AS COMPLETE AS POSSIBLE...
1. Read the guidelines[^] before posting a question.
2. Do not use capitals to emphasise, it is considered bad manners.
3. Do not make demands for full explanations/code. People will give what they can without being prompted.
4. Learn to use Google, Bing and MSDN to do your own research first.
This link[^] has some suggestions to get what you want.
It's time for a new signature.
|
|
|
|
|
hasani2007 wrote: I want to change the colour of characters & background in c.
Check out SetConsoleTextAttribute() .
"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
"Man who follows car will be exhausted." - Confucius
|
|
|
|