|
I want to print data in text file out to the paper
If my data in text file is
110011110
I want to change 1 in the above data to solid black (which have 2 pixel width and 4 pixel height) and 0 in the above data to solid white (which have 2 pixel width and 4 pixel height)
This below is code but it does not work. The printer print the blank page. What wrong with my code?
code:
------------------------------------------------------------
void CTestprint::OnPrintButton()
{
DOCINFO di ;
CPrintInfo printInfo ;
CDC dc ;
CRect draw_area ;
CPrintDialog dlg(FALSE) ;
if (dlg.DoModal() == IDCANCEL)
return ;
HDC hDC = dlg.GetPrinterDC() ;
if (hDC == NULL)
return ;
di.cbSize = sizeof(DOCINFO) ;
di.lpszDocName = "Document name";
di.lpszOutput = NULL ;
// prepare the print information structure
dc.Attach(hDC) ;
printInfo.m_bDirect = TRUE ;
printInfo.m_rectDraw.left = 0 ;
printInfo.m_rectDraw.right = dc.GetDeviceCaps(HORZRES) ;
printInfo.m_rectDraw.top = 0 ;
printInfo.m_rectDraw.bottom = dc.GetDeviceCaps(VERTRES) ;
draw_area = printInfo.m_rectDraw ;
dc.StartDoc(&di) ;
CString testline = "101101001" ;
int x = 0 ;
int y = 0 ;
int pos = 0 ;
// start printing the document
dc.StartPage() ;
while (pos < testline.GetLength())
{
if ((testline.GetAt(pos)) == '1')
{
CBrush brush;
// Creation of the brush with a black color
brush.CreateSolidBrush(RGB(0, 0, 0));
// Create a rectangle with coordinates x,y,x+2,y+4 corresponding with top, left, bottom, right
CRect Rectangle(x, y, x + 2, y + 4) ;
// Fill a rectangle in the current device context or DC
dc.FillRect(&Rectangle , &brush);
x += 2;
}
else if ((testline.GetAt(pos)) == '0'){
x += 2 ;
}
pos++ ;
}
y += 4 ;
x = 0 ;
pos = 0 ;
dc.EndPage() ;
printInfo.m_rectDraw = draw_area ;
dc.EndDoc() ;
VERIFY(dc.DeleteDC()) ;
}
------------------------------------------------------------
|
|
|
|
|
Perhaps a little SetClipRect ?
|
|
|
|
|
Hi
I would like a source code -Format C++,that convert wave to mp3.
where am i can get it?
thanks;)
|
|
|
|
|
try http://www.mp3dev.org/mp3/[^]
Of course, mp3 encoding is a very complex process, and most free mp3 encoders are much less efficient than commercial versions.
You're probably better off just getting a command line mp3 encoder, and calling that from your program, rather than trying to include mp3 encoding directly
--
Help me! I'm turning into a grapefruit!
|
|
|
|
|
Thanks for the help.
But how i'm doing what you mean?
|
|
|
|
|
Well basically you've got 2 choices of how to go about it
1) Include the mp3 encoder source into your application, and call it directly within your code. This could be very messy as the encoder is fairly large
2) Just distribute an encoder .exe with your app, and ShellExecute it to make it do the encoding
I think there's a dll version of LAME too, so that might be better
--
Help me! I'm turning into a grapefruit!
|
|
|
|
|
Some MultiTrack recorders that I used when I were a musician can convert the final Work in MP3.
In the Properties Window there is a section where you browse for the MP3 encoder, and with it, the program encodes to MP3.
N-Track, used BladeEncoder, that's available as a DLL or as an EXE, I think.
"Nelle cose del mondo non e' il sapere ma il volere che puo'."
|
|
|
|
|
You can find a lot of MP3 resources at www.mpeg.org
|
|
|
|
|
Hi,
I finally made my NT service start properly after Windows startup. But I have following problem: the service has window, so not console service. But, when the window appears after having been started as a service (using SrvAny tool), the graphics is very strange. Toolbar, status bar, list box columns headers, this all is somewhat "foxed", it seems like the GUI wasnt painted correctly after start. When I launch the program normally (not as a service), the GUI is normal. Does anybody know ?
Thanks Standa.
Celebrate Mr. Cesilko!
|
|
|
|
|
Actually this seems not to be a C++ question...
The usual reason for this problem is, that the service has not enough access rights to the window station/desktop. (Windowstations and desktops are securable objects like files. They contain a DACL that regulates which users are allowed to create windows, menus etc.)
I don't know if SrvAny handles this problem in any way. But general speaking only the currently logged in user and SYSTEM has proper access to WinSta0\Default. If your service runs under another account you may have to patch the DACLs.
--
Daniel Lohmann
http://www.losoft.de
|
|
|
|
|
Hi,
Is it possible to get a list of all menu shortcuts (NOT the ones in accelerator table)that an SDI application already uses? E.g: Alt+F invokes the file menu (In resource editor, we give an "&" prefix sothat the 'F' in a "File", will have an underline).
I need to give a short cut key dialog, where the user can set his own shortcuts to invoke certain functionalities of the application, but i need to check if it is already taken.
Thankx
Dave
|
|
|
|
|
You'll have to iterate over menu - use GetMenuItemCount and GetMenuString. For each item, find the & prefix. Following letter is the Alt-something you're after. Note that two ampersands are just displayed as one in menu item.
Tomasz Sowinski -- http://www.shooltz.com
- It's for protection - Protection from what? Zee Germans?
|
|
|
|
|
The event is captured in the CListCtrl derived class
void CListCtrlEx::OnItemchanged(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
*pResult = 0;
...
}
But not in the class who uses the derived CListCtrlEx class.
// Header
...
//{{AFX_DATA(CPropDriver)
enum { IDD = IDD_DRIVERDIALOG };
CListCtrlEx m_Drivers;
...
void CSomeViewWithAListControl::OnItemchangedDriversList(NMHDR* pNMHDR, LRESULT* pResult)
{
...
}
How should I solve this ?
Greetings,
Niko
|
|
|
|
|
I guess that MFC first tries to dispatch the message to CListCtrlEx class via message reflection. Since there's a handler for LVN_ITEMCHANGED, function in CSomeView isn't called, because message was handled.
Tomasz Sowinski -- http://www.shooltz.com
- It's for protection - Protection from what? Zee Germans?
|
|
|
|
|
Thank you for your respond.
Do you know how to change this flow ?
If the message is captured by CSomeView, I could call ClistViewEx::OnItemchanged from there...
|
|
|
|
|
Your first chance to process LVN_ITEMCHANGED and other notifications sent through WM_NOTIFY message is virtual function CWnd::OnNotify. Override this in CYourView, check if notify code is LVN_ITEMCHANGED and control id corresponds to your list view. If this is the case, do whatever you need (including calls to CListCtrlEx's handler) and return TRUE.
Otherwise, just call CView::OnNotify to enable message map processing.
Tomasz Sowinski -- http://www.shooltz.com
- It's for protection - Protection from what? Zee Germans?
|
|
|
|
|
I'm sorry, but this doesn't sound like generic programming.
Is it also possible to implement this in the CListCtrlEx class.
So I don't have to change all the classes that use the CListCtrlEx class.
|
|
|
|
|
Niko Tanghe wrote:
I'm sorry, but this doesn't sound like generic programming.
Hehehe... I think you're buying buzzwords too fast. I'd say MFC isn't generic programming at all.
Back to problem: what exactly would you want to achieve: have part of LVN_ITEMCHANGING stuff in CListCtrlEx and additional processing in CYourView? Or you want to keep some code in CListCtrlEx and replace the logic completely in CView-derived class which hosts CListCtrlEx?
Tomasz Sowinski -- http://www.shooltz.com
- It's for protection - Protection from what? Zee Germans?
|
|
|
|
|
Tomasz Sowinski wrote:
Hehehe... I think you're buying buzzwords too fast. I'd say MFC isn't generic programming at all
CListCtrlEx needs to now the state/index/... of the item selected.
But the classes who use CListCtrlEx must also be able to capture LVN_ITEMCHANGED without the knowledge of the implementation of CListControlEx.
|
|
|
|
|
In this case, you'll need ON_NOTIFY_REFLECT_EX macro in CListCtrlEx message map instead of plain ON_NOTIFY_REFLECT. You'll also have to change the CListCtrl::OnItemChanged handler to return BOOL value. Return FALSE and parent windows like CYourView will have chance to process the message *after* CListCtrlEx.
Tomasz Sowinski -- http://www.shooltz.com
- It's for protection - Protection from what? Zee Germans?
|
|
|
|
|
thank you very much (for both answers to my questions)
|
|
|
|
|
Hello,
i have a class for flicker-free-drawing, there i have a global pointer to CBitmap, and in the constructor i create a CBitamp-Object via new. In the destructor i would like to delete the object, but my destructor is never called. When i exit my programm the debugger print "Detecting Memory Leaks!" and then the adress of the pointer to the CBitmap object.
What can i do? When called windows/Visual c++ the destructor?
Please help me!
|
|
|
|
|
The order in which global variables are constructed and destructes is undefined. Therfore it might happen, that the CRT cleanup stuff is called before your destructor is executed and therefore a memory leak is reported.
You should check this by adding a breakpoint to your destructer and see if it is reached.
--
Daniel Lohmann
http://www.losoft.de
|
|
|
|
|
Hello Daniel,
I have a breakpoint in the destructor, but the destructor is never called.
My problem/question:
i have this member-variable of my own class (in the header of a dialog, the member-variable is global):
CMyOwnClass m_test;
When i exit my programm the debugger print me a message "Detecting Memory Leaks!" with the adress of a CBitmap object. That CBitmap object create i via new i the constructor of CMyOwnClass. And i would like to delete the in the destructor.
When call windows/visual c++ the destructor of CMyOwnClass? NEVER?
Thank you for your reply!
|
|
|
|
|
Sorry, but this is not clear to me
klm wrote:
have this member-variable of my own class (in the header of a dialog, the member-variable is global):
CMyOwnClass m_test;
Ah, what the hell do you mean with a global member variable?
It might help if you post some code (shrinked to the necessary stuff).
--
Daniel Lohmann
http://www.losoft.de
|
|
|
|