|
Have a look at GetQueueStatus() .
You may be right I may be crazy -- Billy Joel --
Within you lies the power for good, use it!!!
|
|
|
|
|
In your handler for the CTRL+Z, do something like this:
void MyClass::MyCtrlZHandler()
{
static bool in_progress = false;
if (!in_progress) {
in_progress = true;
in_progress = false;
}
} If a second CTRL+Z comes in while the first is being handled, it is simply ignored.
Software Zen: delete this;
|
|
|
|
|
When my app rx'es a message, it gets it in the form of a MSG struct. That MSG contains the HWND that is to receive the message (i.e. my wnd). Is there any way to find the main HWND of the process that sent the message?
|
|
|
|
|
No (to my knowledge).
What message do you use, and what do oyu need the sender for?
Developers, Developers, Developers, Developers, Developers, Developers, Velopers, Develprs, Developers! We are a big screwed up dysfunctional psychotic happy family - some more screwed up, others more happy, but everybody's psychotic joint venture definition of CP Linkify!|Fold With Us!
|
|
|
|
|
It's a registered message, sent between associated apps. I want the receiving app to be able to display (in a list) the name of the app that sent the msg. I could pass the sender's HWND in the wParam or lParam, but I'm extending an existing app that already uses W and L, so I'm plumb out of args and trying to cook up a workaround
|
|
|
|
|
You may want to look into a more flexible form of Interprocess Communication[^].
Using window messages is extremely limited (two pointer-sized params and you can't pass useful
pointers between processes), and it requires a window
There's no way to know what window sent a message because a message doesn't have to be sent by
a window.
Mark
"If you can dodge a wrench, you can dodge a ball."
|
|
|
|
|
I have my executable, PDB file and Linker files , does any one know of a way I can get the source code back ?
|
|
|
|
|
stixoffire wrote: does any one know of a way I can get the source code back ?
Ummm... where did it go?
"If you can dodge a wrench, you can dodge a ball."
|
|
|
|
|
I have no idea - it is no longer here I copy my files every so often for BckUp and well I dont have it , It is a lot of code so extrapolating from my PDB etc.. is too much..Man U EL labor.
IS there any thing that will get me in touch with my Warm Fuzzy Code..?
|
|
|
|
|
Not that I know of, unfortunately. Maybe your backups?
Hey, I know Manuel Labor
"If you can dodge a wrench, you can dodge a ball."
|
|
|
|
|
I have a game here, and it has about 30 music files, as well as 20 or so data files, and another 30 images, there all in their folders all nice and neat.
But i was wondering if there was a quick and easy way to store the files another way. And at the moment, its perfectly possible for a user to just delete some files, making the game useless, or changing the files, making the game... wierd...
|
|
|
|
|
You could indeed store all those the files in a dll and extract them either as-needed or extract them all upon app startup to a temp dir then delete the temp dir on app exit.
The typical way to store data (eg: a file) in a dll is to put it in the dll's resource table.
|
|
|
|
|
Hello all,
I'm pretty new at C++, and I'm trying to write a console program to communicate with a microcontroller via RS232. I'm trying to use the CSerial class (http://www.codeproject.com/system/serial.asp) to control one of the COM serial ports on my computer.
To open the serial port, I can call:
serial.Open(_T("COM1")); , which works.
However, I would like to prompt the user to select a port, so I tried:
<br />
string port;<br />
...<br />
...<br />
serial.Open(_T(port));<br />
This does not work; I get an error:
main.cpp(24) : error C2065: 'Lport' : undeclared identifier
The prototype for serial.Open looks like this:
<br />
LONG CSerial::Open (LPCTSTR lpszDevice, DWORD dwInQueue, DWORD dwOutQueue, bool fOverlapped)<br />
It turns out that _T("some string") will append an L to the string, so "some string" becomes L"somestring". But if I put in the variable port, it becomes Lport, which doesn't exist. How can I get around this?
I am using Visual C++ express with Platform SDK R2.
Thanks,
Mike
|
|
|
|
|
Change it to:
serial.Open(port.c_str());
|
|
|
|
|
Thanks for the tip Cedric. I tried it, and got the following error:
c:\documents and settings\michael hwang\my documents\visual studio 2005\projects\directinput\directinput\main.cpp(24) : error C2664: 'CSerial::Open' : cannot convert parameter 1 from 'const char *' to 'LPCTSTR'
Maybe I need to make it 'const wchar *' because of UNICODE? How would I do that?
|
|
|
|
|
The _T() macro is intended for use only with constant strings:
_T("Constant string")
#define ConstantString "Constant string"
_T(ConstantString) It's used when your application needs to be compiled for either MBCS (multi-byte character set) or UNICODE. MBCS is the fancy name for ASCII/ANSI applications. UNICODE is useful for when you need to handle Japanese/Chinese text, for example, which requires two bytes per character.
A string of the form "string" is compiled as a MBCS string, and L"string" as a UNICODE string. The _T(arg) is defined as simply arg in the MBCS case and as L##arg in the UNICODE case.
More than you ever wanted to know, I'm sure .
Software Zen: delete this;
|
|
|
|
|
I have three USB devices programmed at the same time. One of them finishes programming first and two of them are still programming. The three device has the same GUID with different addresses (if using devcon find command). the requirement is that to safely remove the one which is already finished programming and leave the rest of two continue to program until finished
fuxiangwu
|
|
|
|
|
Hi,
I'm learning MFC, with prior experience in java, so I have a little bit of understanding about the general concept of a document and a view (I hope).
I'm trying to figure out some missing knowledge I don't have about the concept of Document/View in MFC when using a splitter window.
I have two questions. The first question, I will explain something I did and ask your advice. I think I did it the "right" way, but I'm not 100%. By the right way, I am meaning, the way that makes the most sense and uses MFC as properly as possible. I know there are lots of ways to do the same thing, I am just hoping I did it the most appropriate way.
My second question points out that I am missing something major. I know I did it the wrong way. Could you point me towards the proper way?
All this was done in Visual Studio 2005.
Question 1:
I have a MainFrame and the App Wizard added a window splitter for me. I made the splitter static with one row, two columns. The left pane has a CTreeView subclass. The right pane displays one of two CFormViews, call them info_pane_1 and info_pane_2 (imagine a project settings kind of situation). There are two items in the left CTreeView pane, clicking on the first item causes info_pane_1 to appear in the right pane. Similarly, clicking on the second item causes info_pane_2 to appear in the right pane.
I didn't implement any of the fancy splitter stuff myself, I used "CUsefulSplitterWnd" on this website. The only code I needed to add was a message handler, OnTvnSelchanged(...) to my CTreeView subclass. In this function, I figure out which item was clicked on in the tree view, then I get a pointer to the parent frame (MainFrame). I call a new member I added to MainFrm.cpp called ChangeDialog(int which). The variable "which" is either 1 for info_pane_1 or 2 for info_pane_2. The function ChangeDialog(...) in MainFrm.cpp is just:
(paraphrasing)
switch(which)
case 1:
m_wndSplitter.ReplaceView(0,1,RUNTIME_CLASS(info_pane_1),...)
or
case 2:
m_wndSplitter.ReplaceView(0,1,RUNTIME_CLASS(info_pane_2)
Everything works exactly as I had hoped; Clicking in the tree (in the left pane) dynamically changes what appears in the right pane.
Did I do this the right way?
Question 2:
Here is where I'm confused about how to properly use the Doc/View architecture. What I need to do is simple: The user clicks on the various checkboxes and radio-boxes in info_pane_1, and I have an "Apply" button. When the user clicks "Apply", the state of the controls in info_pane_1 need to be saved. I want to save all this information into the CDocument so that I can use the serialize functions to save all the settings for all the controls. The first thing I did, which I think is correct, is to add control member variables to my classes info_pane_1 and _2. When the user clicks "Apply", I just call UpdateData. So it looks like this:
info_pane_1::OnBnClickedApplybutton()
{
UpdateData(TRUE);
}
This works correctly.
However, now I notice an issue. Whenever I call replaceview in the UsefulSplitterWnd class, it gets rid of the old view that was in the right pane of the splitter (including the class!) (the class is deleted?) and makes a brand new one to put into the right pane. I know this for sure because I can just put a breakpoint in the constructor for whatever class is put into the right pane. So, I've lost all the control settings the user has chosen. But I think this is ok and kind of the right behavior; I should be storing this data into the CDocument not really the pane. So what I do is the following:
First I add a "BOOL checkboxstate" to the CDocument subclass that the App Wizard made for me. Then I change OnBnClickedApply:
void info_pane_1::OnBnClickedApplybutton()
{
UpdateData(TRUE);
CCodeBuilderDoc *p_Doc = (CCodeBuilderDoc *) GetDocument();
ASSERT_VALID(p_Doc);
p_Doc->state_InsertionSortCheck = state_InsertionSortCheck;
}
Maybe this is not the most correct way to do it? It seems like I've missed something.
In any case, now that I've saved the information into the CDocument, I now need to get it when the new view is inserted into the right-hand splitter pane by UsefulSplitterWnd. So what I did was:
void info_pane_1::OnDraw(CDC *pDC)
{
CCodeBuilderDoc *p_Doc = (CCodeBuilderDoc *) GetDocument();
ASSERT_VALID(p_Doc);
state_InsertionSortCheck = p_Doc->state_InsertionSortCheck;
UpdateData(FALSE);
}
This seems to me to be obviously wrong.
I am pretty sure the following things are either broken or confused as a result:
1. I bet CDocument::UpdateAllViews doesn't work.
2. I don't understand why my project/solution has a CMyAppView descended from CView in MyAppView.cpp/.h. I haven't done anything to this class. Is it being used?
I think my question 2 is, how should I have done this? I've clearly done it the wrong way.
Thanks gurus for your comments and help. I am new to MFC, only about 5 days into learning it/working with it. I think I've learned a lot, but I think I don't have a good understanding of what to do with this Document/View architecture.
Thank you so much for any help. I hope to type up a little tutorial on this, as I've seen a number of questions on split windows and Doc/View. I'll add your credits to the tutorial. I hope that perhaps it will be accepted as a tutorial on codeproject.
|
|
|
|
|
maxmaven wrote: think I don't have a good understanding of what to do with this Document/View architecture
Don't feel bad; document/view isn't the easiest thing in the world, which may explain why it's not very popular.
maxmaven wrote:
void info_pane_1::OnDraw(CDC *pDC)
{ CCodeBuilderDoc *p_Doc = (CCodeBuilderDoc *) GetDocument();
ASSERT_VALID(p_Doc);
state_InsertionSortCheck = p_Doc->state_InsertionSortCheck;
UpdateData(FALSE);
}
Instead of getting the check state from your document and initializing the view in your OnDraw override, you should do it in either your OnInitialUpdate() or OnUpdate() override.
maxmaven wrote: I don't understand why my project/solution has a CMyAppView descended from CView in MyAppView.cpp/.h. I haven't done anything to this class. Is it being used?
If you aren't referencing it and haven't implemented it, you can probably remove it. As a suggestion, save a copy of your project and its source files in another folder, so that if you need to revert back to its current state, you can.
Software Zen: delete this;
|
|
|
|
|
This is why I'm confused. So just to recall, I have UsefulSplitterWnd and two child views of the split. The left one is a CTreeView and the right one is a CFormView. Each of the CFormViews has an associated dialog that it displays.
Here's what I've tried with these CFormViews. First, I tried overriding OnCreate(...). But this function is never called at any time during execution of my application.
Next, I tried overriding OnUpdate(...) and OnInitialUpdate(...). I put breakpoints in these functions and found that they are only executed once, at the start up of the application. They are never called again, even when CUsefulSplitterWnd::replaceview(...) is called.
There are basically two important functions that CUsefulSplitterWnd::replaceview(...) calls. They are:
((CView *) GetPane(row,col))->DestroyWindow();
This destroys the window associated with the CFormView. However, in searching the MSDN help docs, it says that this function doesn't destroy the CFormView class object. So my class must be around somewhere (?).
The second important function is:
context.m_pNewViewClass=pViewClass;
context.m_pCurrentDoc=pDoc;
context.m_pNewDocTemplate=NULL;
context.m_pLastView=NULL;
context.m_pCurrentFrame=NULL;
CreateView(row,col,pViewClass,size, &context);
This should be telling me what function I need to override so that the dialog is initialized to the saved values in my CDocument subclass. But, I tried all the sensible functions. They are either never called in the app, or only called once at app startup.
I'm pretty lost.
Max
|
|
|
|
|
Hello,
is it possible to load the windows default color scheme for a dialog and discard the settings of the current scheme?
I dont want to do it by hand.
|
|
|
|
|
hey there fellow cpians.. Hope all is good. I wonder if anyone can help me with
my right-click context menu problem.
my problem is that when i display my menu it is displayed at the top-left of my application
and no where near where the mouse icon is, when the right button was clicked!
here is the code i am using in my function: OnContextMenu
<br />
CMenu menu;<br />
<br />
if (menu.LoadMenu(IDR_MENU1))<br />
{<br />
ClientToScreen(&point);<br />
CMenu *pContextMenu = menu.GetSubMenu(0);<br />
pContextMenu->TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, this);<br />
}<br />
I think my issue has something to do with ClientToScreen or i need to call ScreenToClient maybe.. If i leave out the call to ClientToScreen then the menu is displayed at the top-left of the screen.
thanks in advance.
|
|
|
|
|
dont worry about this one guys..
i have replaced ClientToScreen with the function GetCursorPos and all is rosey!!
|
|
|
|
|
Hi all,
I want to know how much memory is allocated by SafeArrayCreate()
Is there any std. functons?
Thanks,
Gan
|
|
|
|
|
I guess you have not checked SAFEARRAY documentation.
|
|
|
|
|