1.���� c Դ��
2.c#怎么实现打印windows窗体代码
3.C#隐藏和显示窗体
���� c Դ��
呵呵,窗体一年半前我和你一样,码窗码也处于这个状态,体代如果你做windows的窗体程序设计的话,编程像windows这样的码窗码窗口化的软件,你必须接触VS,体代保险网站源码旗下的窗体VC++或VC#,你学完c和c++先接触VC++的码窗码MFC较为容易,使用MFC APP向导可以直接生成你所说的体代windows这样窗口程序,刚开始你是窗体不知道如何生成的,为此你需要边学windows程序设计,码窗码建议使用《windows程序设计》,体代里面介绍了一个基本窗体生成的窗体免费bc源码网原理和步骤。如果你要学VC#,码窗码那你得先学C#,体代离做一个windows这样窗口程序比较远,而且也不知道它生成的原理,当然既然c和c++学的不错的话,c#入门也不难。云小店源码全套如下是一个窗体生成的windows源码:
/*--------------------------------------
CLOCK.C -- Analog Clock Program
(c) Charles Petzold,
--------------------------------------*/
#include <windows.h>
#include <math.h>
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("Clock") ;
HWND hwnd;
MSG msg;
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = NULL ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;
if (!RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT ("Program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindow (szAppName, TEXT ("GDI Test"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL) ;
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static HDC hdc;
static PAINTSTRUCT ps;
static COLORREF color;
static UINT ixClient,iyClient;
static RECT rtWindow , rtClient;
switch (message)
{
case WM_CREATE :
GetWindowRect( hwnd , &rtWindow );
GetClientRect( hwnd , &rtClient );
return 0 ;
case WM_NCPAINT:
hdc = GetWindowDC( hwnd );
color = GetPixel( hdc , , 5 );
SetBkColor( hdc , color );
SetTextColor( hdc , RGB(,0,0) );
TextOut( hdc , , ,
"Editor : CM" , strlen("Editor : CM") );
ReleaseDC( hwnd , hdc );
return 0;
case WM_SIZE :
ixClient = LOWORD( wParam );
iyClient = HIWORD( wParam );
return 0 ;
case WM_TIMER :
return 0 ;
case WM_PAINT :
hdc = BeginPaint (hwnd, &ps) ;
TextOut( hdc , , , "Editor : CM" , strlen("Editor : CM") );
EndPaint (hwnd, &ps) ;
return 0 ;
case WM_DESTROY :
PostQuitMessage(0);
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
c#怎么实现打印windows窗体代码
使用控件执行打印。实现打印的主要组件是“PrintDocument”控件。使用这个控件调用“Print”函数实现“PrintPage”事件。如下是常规命令:
打印事件:
private void tsmiPrint_Click(object sender, EventArgs e){
printDialog1.Document = ThePrintDocument;
string strTest = this.richTextBox1.Text;
myReader = new StringReader(strTest);
if (printDialog1.ShowDialog() == DialogResult.OK){
this.ThePrintDocument.Print();
}
}
打印页事件:
private void ThePrintDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e){
float linesPerPage = 0;
float yPosition = 0;
int count = 0;
float leftMargin = e.MarginBounds.Left;
float topMargin = e.MarginBounds.Top;
string line = null;
Font printFont = this.richTextBox1.Font;
SolidBrush myBrush = new SolidBrush(Color.Black);
linesPerPage = e.MarginBounds.Height / printFont.GetHeight(e.Graphics);
while (count < linesPerPage && ((line = myReader.ReadLine()) != null)){
yPosition = topMargin + (count * printFont.GetHeight(e.Graphics));
e.Graphics.DrawString(line, printFont, myBrush, leftMargin, yPosition,
new StringFormat());
count++;
}
if (line != null)
e.HasMorePages = true;
else
e.HasMorePages = false;
myBrush.Dispose();
}
点击“Print”菜单将调用“PrintFile_Click”。这条线路首先访问PrintDialog对象以便文档准备打印。使用“ShowDialog”对话框以便用户能够设置打印属性并决定是公司网站源码制作否需要打印。在调用“ThePrintDocument.Print方法”后将开始打印过程。系统自动调用“PrintPage”事件打印需要的页面信息。“PrintPageEventArgs”参数“ev”包含打印设备内容,“ev.Graphics”用户绘制打印机。在这个例子中我们将从Rich Text Edit控件中使用StringReader逐行读取信息。 “StringReader”类类似“stream”一样处理字符串并可以以使用ReadLine方法从text edit控件中逐行读取信息。闲猫兼职源码可以根据边框接收位置及字体的大小。我们感兴趣的是记事本可以预览打印机的字体长度,通过使用GetHeight方法(printFont.GetHeight(ev.Graphics()))获得打印机设备内容。因为在屏幕上字体的象素和打印机上的象素是不同的。“PrintPageEventArg”的“HasMorepages”表示连续读取“PrintPage”事件中读取在textbox中比当前页面多的行。
打印预览:
private void tsmiPrintView_Click(object sender, EventArgs e){
try{
string strText = this.richTextBox1.Text;
myReader = new StringReader(strText);
PrintPreviewDialog printPreviewDialog1 = new PrintPreviewDialog();
printPreviewDialog1.Document = this.ThePrintDocument;
printPreviewDialog1.ShowDialog();
}catch (Exception exp){
Console.WriteLine(exp.Message.ToString());
}
}
示例及详细代码:/index.php?topic=.0
C#隐藏和显示窗体
结论:在C#编程中,隐藏和显示窗体有多种方法,但推荐避免使用直接控制父窗体的显示隐藏,因为它可能导致用户体验不佳。以下是两种常见的操作方式:
首先,一种常见的方法是让窗体A自行控制隐藏。在A的按钮事件中,可以编写如下代码:
csharp
this.Visible = false;
Form2 f2 = new Form2();
f2.ShowDialog(); // 不推荐使用 f2.Show(),因为这会导致父窗体A也显示
this.Visible = true; // 当Form2关闭后,A窗体恢复可见
另一种方法是让窗体B控制A的隐藏,A作为参数传递给B。在B中,创建一个显示方法ShowMe:
csharp
private Form fm = null;
public void ShowMe(Form f)
{
fm = f;
fm.Visible = false;
this.Show();
}
// 在Form2的FormClose事件中,恢复父窗体A的可见性
private void Form2_FormClose(object sender, FormCloseEventArgs e)
{
fm.Visible = true;
}
在A的按钮事件中,调用B的ShowMe方法:
csharp
Form2 f2 = new Form2();
f2.ShowMe(this);
然而,这种方式并不推荐用于实际项目,因为它可能导致用户界面操作不直观,不如使用向导类的方法更为优雅,能更好地处理这类窗口间的交互问题。