|
I know how to do this normally, but I don't seem to be catching any WM_CTLCOLOR messages in my controls using WTL. Can anyone tell me how to go about this ?
Christian
#include "std_disclaimer.h"
The careful application of terror is also a form of communication.
Eagles may soar, but weasels don't get sucked into jet engines.
|
|
|
|
|
Christian,
I've got an WTL app now that catches WM_CTLCOLORSTATIC messages for my static controls with no problems. Are you working with a standard form view app or something else?
|
|
|
|
|
I'm working in a dialog box that is WTL, the main project is a plain Win32 window. I am trying to catch WM_CTLCOLOREDIT for my edit box and it is never called.
Christian
#include "std_disclaimer.h"
The careful application of terror is also a form of communication.
Eagles may soar, but weasels don't get sucked into jet engines.
|
|
|
|
|
I put up a dialog box in WTL and found that I caught WM_CTLCOLOREDIT like so:
BEGIN_MSG_MAP(CMyDlg)
MESSAGE_HANDLER(WM_CTLCOLOREDIT, OnCtlColorEdit)
END_MSG_MAP()
LRESULT OnCtlColorEdit(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
ATLTRACE("OnCtlColorEdit\n");
return 0;
}
|
|
|
|
|
Ah.. I was trying to capture it in the alternate message map for the edit control. How do I then change two edit controls to have different colours on the same dialog - by checking the wParam against the HWND ?
Christian
Secrets of a happy marriage #27:
Never go to bed if you are mad at each other. It's more fun to stay up and fight.
|
|
|
|
|
My typical handler looks something like:
LRESULT OnCtlColorEdit(...)
{
// This next line assumes that you've wrapped your edit controls with
// one of WTL's control wrappers in atlctrls.h.
// i.e. CEdit m_Edit1; m_Edit1.Attach(GetDlgItem(IDC_MY_EDIT_CONTROL));
if ((HWND)lParam == m_Edit1.m_hWnd)
{
::SetTextColor((HDC)wParam, RGB(0,0,255)); // blue
return ::GetSysColor(COLOR_WINDOW);
}
else if ((HWND)lParam == m_Edit2.m_hWnd)
{ ... etc.
}
return 0;
}
|
|
|
|
|
Sup.
I have an existing text\HTML file, made by an ofstream obj, and
I want to find a char' stream in the file and set the 'eof()' right there.
e.g.:
ofstream of("moo.txt");
of << "La la la \n And la la la some more, "
"A cow does moo, and some other stuff";
// The file after "match & cut" of the string
// "A cow does moo, and some other stuff"
// will look like:
// "La la la \n And la la la some more, "
Take your best shot
10x.
|
|
|
|
|
I think you have to use the fd function to get a handle to the file descriptor. Then use read() to search for your character and then seek() with -1 and write() once you've found it.
|
|
|
|
|
I have a CDialogImpl-based class, implementing a modeless dialog. My application can have a number of such dialogs, so I'm using this code to create one:
CMyDialog *pDlg = new CMyDialog;
pDlg->Create(NULL);
pDlg->ShowWindow(SW_SHOW); When user will press the close-button in the upper right corner of my dialog - I must destroy the object and the window, so I'm using DestroyWindow(); in WM_CLOSE handler and delete this; in OnFinalMessage().
The problem is that the program falls with ASSERT(pThis->m_pCurrentMsg == &msg) in atlwin.h, line 2281. Btw, if I close the main application - these dialogs are destroying without any ASSERTs...
How can I delete the class after the window have been destroyed?
With the best regards, Vitaly.
|
|
|
|
|
Surely if you've called DestroyWindow then that is all you need to do. Have you traced back to see what was called to cause the ASSERT? I'm betting on delete this.
Christian
#include "std_disclaimer.h"
The careful application of terror is also a form of communication.
Eagles may soar, but weasels don't get sucked into jet engines.
|
|
|
|
|
I don't think that DestroyWindow() is enough. Cause my destructor is not called in such case.
With the best regards, Vitaly.
|
|
|
|
|
The problem is this code near the bottom of that function in atlwin.h
pThis->OnFinalMessage(hWnd);
You can't call delete this from a function that's being called by this. I hope that makes sense.
The way I would solve this is to create a WM_USER function which does the delete from the main app such as:
#define WM_USER_DELETE_DIALOG WM_USER+1
CMyDialog::DeleteMe()
{
PostMessage(parent, WM_USER_DELETE_DIALOG , 0, 0);
}
CApp::OnDeleteDialog()
{
delete pDlg;
}
|
|
|
|
|
That's odd, though. The docs on CDialogImpl::OnFinalMessage() say:Called after receiving the last message (typically WM_NCDESTROY ). Note that if you want to automatically delete your object upon the window destruction, you can call delete this; here.
--Mike--
http://home.inreach.com/mdunn/
"Make sure that if you are using a blow torch that you don't set anything on fire."
-- Chris Maunder
|
|
|
|
|
I've read the same in MFC documentation. And I've thought that atl works the same way but it doesn't
I don't like idea with WM_USER-based message but it seems to be the only way to solve this problem.
With the best regards, Vitaly.
|
|
|
|
|
Yes, I've though about this way. The problem is that I will have many windows like this. Different windows, different classes... So I must implement some kind of window manager for them.
But I still hope that delete this; will work somewhere
With the best regards, Vitaly.
|
|
|
|
|
From the WTL newsgroup (sign up! -- http://groups.yahoo.com/group/wtl)
From: "Tim Smith" <tim.smith@o...>
Date: Thu Jan 18, 2001 11:41 am
Subject: Re: DestroyWindow and OnFinalMessage ?
Here is a basic roadmap of what you need to do. First, inside your
dialog box class, you need make a new version of DialogProc. I just
copied the DialogProc from ATL.
Next, add a flag to your class called m_fDeferDelete. Initialize it
to false.
Inside your new DialogProc, in the WM_NCDESTROY clause after the call
to OnFinalMessage, add the following lines:
if (pThis ->m_pCurrentMsg == NULL)
delete pThis;
else
pThis ->m_fDeferDelete = true
Then in your new DialogProc, after the call to ProcessWindowMessage,
add the code:
if (pThis ->m_fDeferDelete && pOldMsg == NULL)
{
delete pThis;
return FALSE;
}
There might be a better way to do it, but this will work.
In my real code, I created a new base class that included an auto
delete flag. All my dialogs are based on this class. If the auto
delete flag is not set, then the dialog works normally. If it is
set, then the class self deletes as expected.
|
|
|
|
|
In a multi user environment / LAN it is sometime required to figure out who
/ which user on the LAN is "Holding" a file open (maybe that user crashed
and is not even aware of that) and I need to replace the file...
So I need a window with a user list and for each user - list of files they
have a hold on, or alternatively - a list of files and which users are
currently holding these files.
Any help will be appreciated
Thanks,
Alex
|
|
|
|
|
|
I'm looking for a tool to quickly implement syntax coloring in a RichEditCtrl. Most of what I have seen appears to be complex for the sake of being complex. Any suggestions to chase down some tools or some direction in creating my own would be greatly appreciated. I have created my own syntax coloring, but I'm not happy with the performance or flexibility.
Thanks!!
VDC
|
|
|
|
|
I have a problem when rendering a document in a CScrollView derived class. I started with both a simple approach (a version of HexView from a sample included with the book, "Windows 95 MFC"), and a more complex one from an MS site. In each case, everything "almost" works. However as you scroll, on occassion, it appears as though a remnant from a previous line persists. In adapting these two approaches, the problem either doesn't exist with the original code or is minimal. It is only when I try to add my own data that the problem shows up. Initially I thought that I had incorrectly adapted the sample's logic and while that is probably the case it is not obvious.
In both cases, the sample code is retrieving data from a file - reading the data into an array then pulling out the appropriate number of array lines for display. What I am trying to do is the equivalent of dynamically adding some data to what is pulled out of the array and appending that data for display in the view. The reason is that once I can determine the real problem I will use the logic to display information that is interpreted (not a one::one relationship with what is on the file/document).
Anyway, that is when the problem is exhibited, once additional data is added that wasn't retrieved from the file.
The problem must be obvious, but I don't see it.
There was too much code to try to decide what "snippet" would make this more understandable, so I havent included any. But I figured I am not the first person to run into (or create) this problem and maybe one of you have had the same problem.
Any ideas would be appreciated. Thanks - Mike
|
|
|
|
|
Hi everybody,
I have a problem with my dialog base window :
when "enter" or "escape" key is striked, my window is destroyed by OnDestroy().
I don't know why and how easily avoid this.
Could someone help me please?
Thanks.
Jean-Guillot
|
|
|
|
|
Handle OnOk() for enter and OnCancel() for escape, in which you prevent the program from terminating.
|
|
|
|
|
Hey Guys
does anyone know how to enumerate all the key containers using the crypto API and then get them displayed in a list box which the user can select one from. I have written what i think should work but it doesn't it just ends up displaying a null string ie iiiiiiiiiiiiiiiiiiiiiiiiiietc so my guess is the key stores arn't even being read and put in the string.
Your Help Is greatly Appreciated
Peter
|
|
|
|
|
to tell the truth, im quite embarrassed to ask this question.
is it possible for me to still use the resource editor even though i will not be using mfc?
you see, i'm new to visual c++, a newbie, and can't seem to understand the intricacies of the language, particularly mfc. i've decided that creating applications using the basic win32 windows api, without the use of mfc, would be a nice start for me. please tell me if this is true. or better yet, just answer the question.
|
|
|
|
|
yes. I suggest that you read a book about visual c++.
|
|
|
|