|
Hello,
i tried to fix this, but it still doesn't work. I thougth about it and i guess it could be anything with the ressource file of the dialogue.
LANGUAGE 0, SUBLANG_NEUTRAL
IDD_DIALOG30 DIALOG 0, 0, 1000, 600
STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU
CAPTION "Raumkarte"
FONT 8, "Ms Shell Dlg"
{
CONTROL "", ID_RAUMKARTE31, WC_STATIC, SS_BLACKFRAME, 201, 0, 800, 600, WS_EX_ACCEPTFILES | WS_CLIPSIBLINGS | WS_CLIPCHILDREN
SCROLLBAR ID_SCROLLBARVER32, 202, 2, 19, 186, SBS_VERT, WS_EX_LEFT
SCROLLBAR ID_SCROLLBARHOR33, 222, 2, 214, 15, 0, WS_EX_LEFT
LISTBOX ID_RAUMKARTEAKTIONSLISTE34, 1, 0, 198, 183, WS_TABSTOP | WS_VSCROLL | LBS_NOINTEGRALHEIGHT | LBS_SORT | LBS_NOTIFY, WS_EX_LEFT
LISTBOX ID_RAUMKARTEWAHLAKTIONSLISTE35, 1, 187, 198, 188, WS_TABSTOP | WS_VSCROLL | LBS_NOINTEGRALHEIGHT | LBS_SORT | LBS_NOTIFY, WS_EX_LEFT
}
The DirectX Code should be in the Static Control "ID_RAUMKARTE31".
Maybe i have to add a parameter.
Thx & Greetings
|
|
|
|
|
I added these lines. There is still no effect. Please take a look at the code i postet with a thread i made in questions.
I think it has something to do with the way i manage the edit control where directx is supposed to render. It would be really nice if you take a look in my other thread.
Thanks a lot.
|
|
|
|
|
I have a CMFCToolbar that contains a CMFCToolBarMenuButton (which will display a drop down menu).
I add my custom button like this (not production code)
LRESULT CMainFrame::OnToolbarReset(WPARAM wp, LPARAM)
{
UINT uiToolBarId = (UINT) wp;
if (uiToolBarId == IDR_TOOLBAR1 )
{
CMenu m_Menu;
m_Menu.LoadMenu(IDR_OUTPUT_POPUP);
MyToolbarMenuButton menuButton(ID_BUTTON32771, m_Menu.GetSubMenu(0)->GetSafeHmenu(), GetCmdMgr()->GetCmdImage(ID_BUTTON32771, FALSE), NULL, FALSE);
m_MaxToolbar.ReplaceButton(ID_BUTTON32771, menuButton);
}
return 0;
}
Eventually, in the framework, I get to this function :
int CMFCToolBar::InsertButton(const CMFCToolBarButton& button, INT_PTR iInsertAt)
{
/1/ CRuntimeClass* pClass = button.GetRuntimeClass();
ENSURE(pClass != NULL);
/2/ CMFCToolBarButton* pButton = (CMFCToolBarButton*) pClass->CreateObject();
ENSURE(pButton != NULL);
ASSERT_VALID(pButton);
pButton->CopyFrom(button);
INT_PTR iIndex = InsertButton(pButton, (int) iInsertAt);
if (iIndex < 0)
{
delete pButton;
}
return(int) iIndex;
}
Question:
If I understand correctly the code at line 1 and 2 in CMFCToolBar::InsertButton, it will loose all information about my own derived class MyToolbarMenuButton by getting the Runtime class and casting that to the base class ?
The issue is that I want to override some virtual method in CMFCToolBarButton but when I add my own class, it is not actually "instantiated".
Thanks.
I'd rather be phishing!
|
|
|
|
|
Hello there. I am trying to call a C function in my newly created Dll project's code. But doing so produces Unresolved External Symbol error. Here is the what I am trying
Header.h
int call_main(int argc, char** argv);
Header.cpp
int call_main(int argc, char** argv)
{
return 0;
}
Now I include this Header.h in my Dll's main file and try to call call_main . Building the project produces the said error.
<h1>include "Header.h"</h1>
class Functions
{
public:
static __declspec(dllexport) int Call_MyMain(char **argv);
};
int Functions::Call_MyMain(char **argv)
{
return call_main(8, argv);
}
What could be wrong? What am I missing? Thanks for any input.
|
|
|
|
|
You need to include the object module of header.cpp inside the build of your dll.
|
|
|
|
|
I don't know what does this mean? How do I do that?
|
|
|
|
|
...means your dll project should be building header.cpp... which produces an object file.
|
|
|
|
|
It is building header.cpp and it also produces an object file
|
|
|
|
|
If you actually compiled one as C and the other as C++ (or the other way around), you'll also have to deal with name mangling...
Standard C++[^]
If they're both C++, it's actually still possible to screw up the mangling, I believe Studio allows you to set the mangling mode to each file independently (haven't used Studio in a while though).
Decorated Names[^]
|
|
|
|
|
i think You need to include the object module of header.cpp inside the build of your dll.
|
|
|
|
|
|
Just in few words my question is next:
Is there a way to get current invalid region when CWnd gets WM_NCPAINT message (in OnNcPaint() handler)?
Details:
I have a main frame with few child dialogs placed on it. Dialogs have custom controls. Custom controls have specific non-client area and that area is drawn when the control gets WM_NCPAINT message.
Now I want to invalidate (redraw) only a small part of my main frame calling InvalidateRgn(&invalidRgn). If that invalid area overlaps with control's non-client area - WM_NCPAINT is sent to the control.
Code in control's OnNcPaint() is like this:
void CMyCtrl::OnNcPaint()
{
CWindowDC dc(this);
DoPaint(&dc);
...
}
And it paints over all window dc of the control. Whole non-client area is repainted, not only invalid region which I've passed when called InvalidateRgn(&invalidRgn).
That is a behaviour I want to get rid of. I need only invalid region to be repainted. My suggestion is that I need somehow to get current invalid region and select it before painting like
dc.SelectClipRgn(&invalidRgn)
So the question is can I do that? and if yes - how?
|
|
|
|
|
GetUpdateRect API call retrieves the smallest bounding rectangle that encloses the update region and does the same function as BeginPaint which is only for use in WM_PAINT calls.
Which answers your question ... My suggestion is that I need somehow to get current invalid region? ... and yes you can set it as a clip for your drawing if you want.
In vino veritas
modified 12-Jul-16 9:07am.
|
|
|
|
|
GetUpdateRect returns only client area coordinates that should be updated. I need whole control's invalid area including non-client parts.
Actually seems I've already find an answer: when Windows send WM_NCPAINT message it puts invalid region handle into wParam, but seems in coordinates relative to the desktop, - that's what I was looking for.
|
|
|
|
|
I´m sure there is a simple solution but it drives me crazy:
class A
{ virtual bool method M() };
class B : public A { .... }
class C1 : public B
{ virtual bool method M() override };
class C2 : public B
{ virtual bool method M() override };
class D
{
static bool DoSomething( A* ptr ) { ptr -> M(); }
}
Now I am working in a codepiece of C1 which calls D::DoDomething( )
C1::anymethod()
{
D::DoSomething( this );
} Ok, thats simple: C1::M() will be called because of the inheritance
But now I wanna have that D calls the M() of C1´s base A by typecasting the this ptr to a base:
C1::anymethod()
{
D::DoSomething( (A*)this );
}
but this will also call C1:M().
How can I tell the D::DoSomething function "If you use M1() then you have to call A::M1() "
with knowing that in DoSomething by the type of the ptr?
|
|
|
|
|
The simplest solution would be to create another non-virtual function in class A:
class A
{
bool method AM();
virtual bool method M() { return AM(); }
};
class D
{
static bool DoSomething( A* ptr ) { ptr ->AM(); }
};
|
|
|
|
|
oh , the example I have is more tricky:
D should call "the next M() of any parent above the child class C1"
Its vice versa to the virtual inheritance when you call the last one in the hierarchy ...
if I call
C1::anytest ()
{
B::M();
}
it goes "up" the hierarchy an calls the next found M();
in this case A::M()
But in class D´s DoSomething where I get a ptr to C1, or C2 ...
how can do it there?
|
|
|
|
|
Sorry, this was not clear from your initial question:
Quote: But now I wanna have that D calls the M() of C1´s base A
But you can do the same:
Implement a non-virtual function B::BM() which is called by the virtual function B::M() and so on. Then you can call the non-virtual functions AM() , BM() , and so on or the virtual M() function.
If you want to call the <code> M() function of the next upper class in the hierarchy, you need to know the real class of the passed argument during run-time. This requires that your classes support some kind of Run-time type information - Wikipedia, the free encyclopedia[^].
|
|
|
|
|
I think that here[^] you will find a solution, in fact, the same solution like Jochen said.
modified 11-Jul-16 8:10am.
|
|
|
|
|
Ah the joys of deep class hierarchy in C++ and OOP coding circa 1980-1990
Probably too much danger in doing what should be done with that old code and using modern Composition over inheritance style.
It isn't going to be fun and C++ is going to fight you all the way as it will try to discourage that style.
Working with old code I feel your pain ... good luck.
In vino veritas
|
|
|
|
|
Hi,
i want develop one application which required the fast printing on dot matrix i saw one dos application it it's giving the printing very fast compared to windows
please suggest which technology should i prefer.
|
|
|
|
|
Print speed is a feature of the printer, not the operating system or programming language.
|
|
|
|
|
This is very general question
Think about following topics:
- printer connection via: direct connection on parellel Centronics, ... WLAN network
- communication: whats between printer and programm code? direct commnication, printer driver, spooler, LAN network...
- how does operation system drivers communicate? do you use "Windows" printsystem which does Scaling, function mapping from window->draw to printer->draw?
the more comfortable you can code the slower the speed.
fastestway: use ASM and direct code the 8x8 bitmaps, send them to the printer, as we did in 1985
but think of: paper size, drawing, filling, fonts etc etc.
|
|
|
|
|
Sounds like you have the windows print driver sending the text out to the dot matrix printer in graphics form ... that means it will be printing the truetype fonts from windows. The old matrix printers are much faster if you just send the text in raw form and the printer uses it's internal font.
There is probably a setting on the windows print driver for the printer to turn the truetype font and print graphics output off.
You can also probably do it in code when you get the printer DC you should be able to set the printer capabilities before you start the print cycle in your code.
In vino veritas
|
|
|
|
|
Simple.
When printing, Windows transforms what you want to print into a graphic bitmap and then send the graphic to the dot matrix printer which can be very slow to process. This technique is used because anything that can be showed on screen can be printed.
With DOS, the app is directly sending commands to the printer, but is limited to printer internal fonts (Arial may be not available in the printer), sizes and other settings.
Another problem is that the app must know the commands of the printer.
So DOS os faster because it takes advantage of the printer internal capabilities. On windows, you can print in raw mode, but you are responsible of everything.
You can make windows print in the DOS fashion by installing the driver for for a Generic/Text Only printer. It will be fast but ugly.
Patrice
“Everything should be made as simple as possible, but no simpler.” Albert Einstein
|
|
|
|