|
igor1960 wrote:
Control Bar message processing as I recall is not the same as Dialog message processing.
You are running on main application message pump that doesn't have IsDialogMessage.
Yes I think this is the problem. I am about to change from a CEdit to creating an EDIT window using the Windows SDK API. Msg's won't get sent to the parent then, and hopefully all of my problems will go away. Any thoughts?
Neville Franks, Author of ED for Windows. Free Trial at www.getsoft.com
|
|
|
|
|
Actually it's not CControlBar -- it's CDialogBar restrction.
Here it is from Technical Note 31:
CDialogBar
A dialog bar is a control bar that contains standard Windows controls. It acts like a dialog in that it contains the controls and supports tabbing between them. It also acts like a dialog in that it uses a dialog template to represent the bar.
A CDialogBar is used for the print-preview toolbar, which contains standard pushbutton controls.
Using a CDialogBar is like using a CFormView. You must define a dialog template for the dialog bar and remove all the styles except WS_CHILD. Note that the dialog must not be visible.
The control notifications for a CDialogBar will be sent to the parent of the control bar (just like toolbar buttons).
Sure, you can have different methods of attacking and resolving that problem:
However, because it's your container application that specifically put that CEdit in CDialogBar, I would assume that the right way to do it, would be to place the code into App or Frame.
So, I would be looking into for example overloading PreTranslateMessage of App or Frame. Something like that:
BOOL CYourApp::PreTranslateMessage(MSG* pMsg)
{
if (CWinApp::PreTranslateAppMessage(pMsg))
return TRUE;
....
...
if(((pMsg->message == WM_KEYDOWN)||(pMsg->message == WM_KEYUP))&&
(pMsg->wParam == VK_RETURN)) // whatever you want here
{
char szClassName[32];
if((GetClassName(pMsg->hwnd, szClassName, 32))&&
(_stricmp(szClassName, "Edit") == 0))
{
if(::IsChild(hWndYourControlBarHandlerHere, pMsg->hwnd))
{
SendMessage(pMsg->hwnd, pMsg->message, pMsg->wParam, pMsg->lParam);
// or you may translate dispatch it right here -- up to you...
return TRUE;
}
}
....
Don't copy paste above though. I maybe wrong again (as usual).;P
Regards
"...Ability to type is not enough to become a Programmer. Unless you type in VB. But then again you have to type really fast..."
Me
|
|
|
|
|
That is curious. I just tried a dialog box with an edit control, put a WM_LBUTTONDOWN handler in the dialog box, and left-clicking in the edit box definitely does not go to the dialog box. Maybe the CEdit-derived class does something different? What other message handlers do you have in the edit class?
HPS HwndSpy - GUI developer's aid to visually
locate and inspect windows. For the month of August
only, use coupon code CP-81239 for 30% off.
|
|
|
|
|
HPSI wrote:
That is curious. I just tried a dialog box with an edit control, put a WM_LBUTTONDOWN handler in the dialog box, and left-clicking in the edit box definitely does not go to the dialog box.
Your right. That's what I see in sample "Dialog" based apps here. See my reply to Ravi.
The derived class only uses OnKillFocus().
This is the create code:
DWORD dwStyle = WS_BORDER | WS_CHILD | ES_AUTOHSCROLL;
CRect EditRect( 0, 0, 1, 1 );
if( CEdit::Create( dwStyle, EditRect, m_pTreeCtrlEdit->m_pTreeCtrl, 12345 ) )
; ....
The edit window gets resized and shown when required. The parent window is a class derived from CWnd. And it lives in a docked control bar.
Neville Franks, Author of ED for Windows. Free Trial at www.getsoft.com
|
|
|
|
|
hi all
im using this function i found on msdn to check if im online
inline BOOL Online()
{
DWORD dwState = 0;
DWORD dwSize = sizeof(DWORD);
BOOL fRet = FALSE;
if(InternetQueryOption(NULL, INTERNET_OPTION_CONNECTED_STATE, &dwState, &dwSize))
{
if(dwState & INTERNET_STATE_DISCONNECTED_BY_USER)
fRet = TRUE;
}
return fRet;
}
however, when i compile im getting the below linking error
error LNK2019: unresolved external symbol __imp__InternetQueryOptionA@16 referenced in function "int __cdecl Online(void)" (?Online@@YAHXZ)
does ne1 have ne ideas
thanks
si
|
|
|
|
|
silly me was missing the line
#pragma comment(lib, "wininet.lib")
sorry 2 be a pain
si
|
|
|
|
|
But isn't it nice when someone finds their own answer and posts it, rather than just "It's OK, I fixed it"...
Steve S
|
|
|
|
|
Hi
I want to be able to change the color of the border of the group box into 'green' for example.
How can i achieve this? By subclassing?
Greetings
Jens
|
|
|
|
|
I've just had a quick look, and WM_CLTSTATIC isn't going to help you with this. So you are
going to have to subclass and override WM_PAINT at least. There are plenty of "flat" controls
on CP which can give you a starting place.
Maybe a small article on your discoveries could come out of it?
Iain.
|
|
|
|
|
Hi Iain
I've looked at some examples of CStatic controls being 'label fields'. Most of them are discussing the background color of text or control etc
But not how to color the border of the control.
Can you provide me with a good article about it or a code example?
Greetings
Jens
|
|
|
|
|
|
Please, this forum is only for Visual C++ related questions!
but, hi and welcome to CodeProject anyway!
Rickard Andersson
Here is my card, contact me later!
UIN: 50302279
Sonork: 37318
Interests: C++, ADO, SQL, Winsock, 0s and 1s
|
|
|
|
|
I load image file (.jgep) into picture control by using this code;
m_image.Load(m_SavePath);
m_CPicture.SetBitmap((HBITMAP)m_image);
This code is same with vb.net code:
picoriginal.Image = Image.FromFile(m_SavePath)
After that I need to cut a portion of the image and put it into another picture control with this code;
hdcDest = ::GetDC( CpThis->m_CpDest->GetSafeHwnd() );
hdcSrc = ::GetDC( CpThis->m_CpSource->GetSafeHwnd() );
::SelectObject( hdcSrc, CpThis->m_BackSurface.hBmp );
::StretchBlt(hdcDest,0,0,300,400,hdcSrc,pointlx,
pointly,cutwidth,cutheight,SRCCOPY);
::DeleteDC( hdcSrc );
::ReleaseDC( CpThis->m_CpDest->GetSafeHwnd(), hdcDest );
With this code the portion oh the image that have been cut is handle by hdcDest.
The problem is how I can save the cutting image into the new file(.jpeg)?
I can do it in vb. net by using this code;
picresult.Image.Save(Apath & "\result.jpg", Imaging.ImageFormat.Jpeg)
savebmap.Save(Apath & "\resultraw.raw")
How to translate this code into vc++ code?
Any idea to solve my problem, I apreciate it. Thanks.
|
|
|
|
|
GDI+ has functionality for this.
Steve S
[This signature space available for rent]
|
|
|
|
|
Thanks, I know it GDI+ can handle this but how to code it, I can get it, I have try so many times but cannot work. Now all the image data is in hdc but how to get from this into GDI+? Could you give some sample code, thanks.
|
|
|
|
|
I want to pass
MCSD exam 70-015,
(Visual C++ 6.0 distributed)
but official -sample questions - costs much for my country,
so does someone can tell me where is it possible
to find good free
sample questions ?
Other materials, referencies, good links,
"exam memories" ?
Interesting for precise relation:
does this exam is right qualifying people who passed it?
thanks you.
|
|
|
|
|
Hi everybody ! Little question:
I want to display a popup menu on the screen. This menu represent a list with selected channels (checked) and non-selected channels (unchecked). So, the user should be able to select/deselect a channel from the list. The problem is that these channels are dynamically created (so I don't know the number at design time).
So, how can I do this? (For example use just one single function to handle all events but how can I know wich item has been clicked??)
Any idea? Thanks
|
|
|
|
|
There's an example here of dynamically created popup menus.
HPS HwndSpy - GUI developer's aid to visually
locate and inspect windows. For the month of August
only, use coupon code CP-81239 for 30% off.
|
|
|
|
|
Thanks !!
I never heard before about ON_COMMAND_RANGE !!
This will help me a lot for doing what I want!
Thanks
|
|
|
|
|
Dear friends,
I’m beginner in Visual C++ 6.0 and I’m looking for advice and help.
I have English application which must be translated in other language like Rumanian, and Russian.
Can anybody advise from where I can get language classes for VC++6.0?
Thanks in advice,
Andrei Druta
|
|
|
|
|
Generally speaking, you'd do a few things;
(a) put translatable elements into your resources (menus, dialogs, strings)
(b) make separate language DLLs for each target
These have different names eg xxxEN.DLL (English), xxxES.DLL (Spanish), xxxIT.DLL (Italian), xxxDE.DLL (German), xxxFR.DLL (French), xxxRO.DLL (Rumanian), xxxRU.DLL (Russian) and they will contain translated resources
(b) Use language id to work out which DLL to use
(c) LoadLibrary the right DLL
(d) use AfxSetResourceHandle to specify which DLL to use
For number/date formats you can use GetLocaleInfo to retrieve country specific things like names of days/months etc.
Steve S
[This signature space available for rent]
|
|
|
|
|
Hi,
Can I use Unicode in my aplication for specific caracters?
If yes how can I include this in the string in my resource file like:
… code …
BEGIN
POPUP "&Fi"ş"ier"
BEGIN
MENUITEM "&Nou\tCtrl+N", ID_NEW
MENUITEM "&Deschide...\tCtrl+D", ID_OPEN
MENUITEM SEPARATOR
… Code …
Thanks.
Andrei Druta
|
|
|
|
|
You're on the right track with (b) but there is no need to have multiple files (unless you really need them). One of my company's products is used in over a dozen different countries. I create the English version, and translators from IBM create the others. In short, there is only one call to LoadLibrary() , and it's always for the same-named DLL.
|
|
|
|
|
Hi,
There is an excellent built in utility in VC++. here are the steps:
1) Create a uni-code file (use note-pad and save as uni-code for encoding option) save it with the extention *.mc
2) At the top of the file write the following code:
MessageIdTypedef=DWORD
LanguageNames=(
Russian=0x019:MSG00019
Hebrew=0x40d:MSG0040d
)
"Russian" and "Hebrew" are just for the example, search MSDN or developer sites (or use Visual Assist) to find out the code for the languages you need.
3) Each control that represents text (i.e a static text) must not be hard coded english, it should load its text dynamically using
m_pMyControl->SetWindowText(......) , m_pMyControl is the handler to the control.
Now i will explain how to fill the ...... in the SetWindowText
4) in the uni code file *.mc you will now add defines that will represent your desired text, add the following code in the *.mc file:
MessageId=
SymbolicName=IDSL_EDIT_BOX_CONTROL_MAIN_MESSAGE
Language=English
Your english text here
.
Language=Russian
bla bla in russian
.
Language=Hebrew
bla bla in hebrew
.
make sure you end the section with new line (press enter after the '.' at the end of the section otherwise it would compile correctly).
4) add the *.mc file to your project.
5) right click it and choose compile
6) notice after compilation a header file called Strings.h was generated.
7) now when ever you need the 'SetWindowText', make sure you have a
#include "Strings.h" and use the SetWindowText() method as follows:
USHORT uLang = 0x009; // English
// uLang = 0x019; // Russian
// uLang = 0x40d; // Hebrew
CString szMsg;
LPVOID lpMsgBuf;
DWORD n;
n = ::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_HMODULE |
FORMAT_MESSAGE_IGNORE_INSERTS,
AfxGetInstanceHandle(),
uID,
MAKELANGID(uLang , SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0,
NULL);
szMsg = (LPCTSTR)lpMsgBuf;
m_pMyControl->SetWindowText(szMsg);
now the control will show the proper text in the desired language....
hope this helps ya
Yaron
Ask not what your application can do for you,
Ask what you can do for your application
|
|
|
|
|
Hi Yaron,
Can I use Unicode in my aplication for specific caracters?
If yes how can I include this in the string in my resource file like:
… code …
BEGIN
POPUP "&Fi"ş"ier"
BEGIN
MENUITEM "&Nou\tCtrl+N", ID_NEW
MENUITEM "&Deschide...\tCtrl+D", ID_OPEN
MENUITEM SEPARATOR
… Code …
Thanks.
Andrei Druta
|
|
|
|
|