1.���� c Դ��
2.c#怎么实现打印windows窗体代码
3.C#隐藏和显示窗体
���� c Դ��
呵呵,窗体一年半前我和你一样,码窗码也处于这个状态,体代如果你做windows的窗体程序设计的话,编程像windows这样的码窗码窗口化的软件,你必须接触VS,体代hashcat源码编译旗下的窗体VC++或VC#,你学完c和c++先接触VC++的码窗码MFC较为容易,使用MFC APP向导可以直接生成你所说的体代windows这样窗口程序,刚开始你是窗体不知道如何生成的,为此你需要边学windows程序设计,码窗码建议使用《windows程序设计》,体代里面介绍了一个基本窗体生成的窗体苹果仿写源码原理和步骤。如果你要学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”对话框以便用户能够设置打印属性并决定是spring图片源码否需要打印。在调用“ThePrintDocument.Print方法”后将开始打印过程。系统自动调用“PrintPage”事件打印需要的页面信息。“PrintPageEventArgs”参数“ev”包含打印设备内容,“ev.Graphics”用户绘制打印机。在这个例子中我们将从Rich Text Edit控件中使用StringReader逐行读取信息。 “StringReader”类类似“stream”一样处理字符串并可以以使用ReadLine方法从text edit控件中逐行读取信息。arduinomwc飞控源码可以根据边框接收位置及字体的大小。我们感兴趣的是记事本可以预览打印机的字体长度,通过使用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);
然而,这种方式并不推荐用于实际项目,因为它可能导致用户界面操作不直观,不如使用向导类的方法更为优雅,能更好地处理这类窗口间的交互问题。