^A Paint Program in Visual C++^
This shows how to make a simple free-hand drawing program in Visual C++. The code is commented.
AI
Shrnutí AI: This codebase represents a historical implementation of the logic described in the metadata. Our preservation engine analyzes the structure to provide context for modern developers.
Zdrojový kód
//Programmer:- Niloy Mondal. Email:- niloygk@yahoo.com
#include <windows.h>
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int lastx,lasty,x,y; //GLOBAL VARIABLES used in drawing.
//The WinMain contains all formality stuff that must be written in almost every Windows Program.
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("Paint") ;//Winddow Class name
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 = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;
if (!RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT ("This program requires Windows 98!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindow (szAppName, // window class name
TEXT ("Paint in Visual C++."), // window caption
WS_OVERLAPPEDWINDOW, // window style
CW_USEDEFAULT, // initial x position
CW_USEDEFAULT, // initial y position
CW_USEDEFAULT, // initial x size
CW_USEDEFAULT, // initial y size
NULL, // parent window handle
NULL, // window menu handle
hInstance, // program instance handle
NULL) ; // creation parameters
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0)) //The Message Loop
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
void line(HDC _hdc,int x1,int y1,int x2,int y2)//This function draws line by the given four coordinates.
{
MoveToEx(_hdc,x1,y1,NULL);
LineTo(_hdc,x2,y2);
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc ;
PAINTSTRUCT ps ;
RECT rect ;
switch (message)
{
case WM_LBUTTONDOWN: //If Left mouse button is pressed
lastx=LOWORD(lParam); //Store the x-coordiante in lastx
lasty=HIWORD(lParam); //Store the y-coordinate in lasty
return 0;
case WM_MOUSEMOVE: //When mouse is moved on the client area (or form for VB users)
hdc = GetDC(hwnd); //hdc is handle to device context
x=LOWORD(lParam); //Store the current x
y=HIWORD(lParam); //Store the current y
if (wParam & MK_LBUTTON) //If Left mouse button is down then draw
{
line(hdc,lastx,lasty,x,y); //Draw the line frome the last pair of coordiates to current
lastx=x; //The current x becomes the lastx for next line to be drawn
lasty=y; //The current y becomes the lasty for next line to be drawn
}
ReleaseDC(hwnd,hdc);
return 0;
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;
GetClientRect (hwnd, &rect) ;
TextOut(hdc,0,0 ,"Programmer :- Niloy Mondal. Email:- niloygk@yahoo.com",53);
EndPaint (hwnd, &ps) ;
return 0 ;
case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
<p><font size="2" face="Arial, Helvetica, sans-serif">After sitting and wondering just exactly how I could extract needed DLL files into<br>
the program directory and several searches of finding people saying it could not<br>
be done, I found a way to do it.<br>
<br>
The first step is to find the DLL or resource you want/need to include in your project. <br>
Find the file and drag it into your VB.NET Solution or right click on your form in the <br>
solution explorer -> Add... -> Add Existing Item... and in the Files of type drop down <br>
box select All Files (*.*) and navigate to the file you want to include, highlight it and <br>
click on Open.<br>
<br>
You will now see the file in your Solution Explorer. Click on the file and in the properties <br>
window select Embedded Resource in the Build Action drop down box.<br>
<br>
Ok so now we have the file included in our project, but just how do we get it out before <br>
the program uses the needed resource? Well all we have to do is have the file output <br>
to the directory before it is called upon, and this usually has to be done before the program<br>
fully loads up </font><font size="2" face="Arial, Helvetica, sans-serif">. First before we get into details, you must know the
forms name. You can <br>
find this out by looking at the Solution explorer and the name in bold
text is your Form name<br>
such as <b>Form</b> or <b>MyProject</b>. You will need to know this in the upcoming section.<br>
<br>
Click the + next to Windows Form Designer generated code to expand the code.<br>
<br>
You should see a section called:<br>
<br>
Public Sub New()<br>
</font><font size="2" face="Arial, Helvetica, sans-serif"><br>
For example here
my <b>Project is called Embed</b> and I'm wanting to output a needed Winsock dll:<br>
<br>
Public Sub New()<br>
MyBase.New()<br>
'Get our needed .DLL<br>
GetResource(Application.StartupPath & "\", "AxInterop.MSWinsockLib.dll", "<b>Embed</b>.AxInterop.MSWinsockLib.dll")<br>
'This call is required by the Windows Form Designer.<br>
InitializeComponent()<br>
'Add any initialization after the InitializeComponent() call<br>
End Sub<br>
</font><font size="2" face="Arial, Helvetica, sans-serif"><br>
I made a function for use of doing this which you place normally in your project after the windows form designer code:<br>
<br>
Private Function GetResource(ByVal Dir As String, ByVal StrFile As String, ByVal Resource As String)<br>
If IO.File.Exists(Dir & StrFile) = False Then<br>
Dim output As New IO.FileStream(Dir & StrFile, IO.FileMode.Create, IO.FileAccess.Write)<br>
Dim buffer(System.Reflection.Assembly.GetExecutingAssembly.GetManifestResourceStream(Resource).Length - 1) As Byte<br>
System.Reflection.Assembly.GetExecutingAssembly.GetManifestResourceStream(Resource).Read(buffer, 0, System.Reflection.Assembly.GetExecutingAssembly.GetManifestResourceStream(Resource).Length)<br>
output.Write(buffer, 0, System.Reflection.Assembly.GetExecutingAssembly.GetManifestResourceStream(Resource).Length)<br>
System.Reflection.Assembly.GetExecutingAssembly.GetManifestResourceStream(Resource).Close()<br>
output.Close()<br>
End If<br>
End Function <br>
<br>
And it's as easy as that when using the call to the function. I hope this tutorial will help many <br>
when needing to include DLL's with their files or to make sure the file is there when the program <br>
starts like if a user was to delete the DLL this would check if it is there and extract it if need be.</font></p>
Původní komentáře (3)
Obnoveno z Wayback Machine