^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
Riepilogo 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.
Codice sorgente
//Programmer:- Niloy Mondal. Email:- [email protected] #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:- [email protected]",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>
Commenti originali (3)
Recuperato da Wayback Machine