⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 g2_win32_thread.c

📁 ViennaRNA-1.6.1
💻 C
字号:
/*******************************************************************************  Copyright (C) 1998-2001  Ljubomir Milanovic & Horst Wagner**  This file is part of the g2 library****  This library is free software; you can redistribute it and/or**  modify it under the terms of the GNU Lesser General Public**  License as published by the Free Software Foundation; either**  version 2.1 of the License, or (at your option) any later version.****  This library is distributed in the hope that it will be useful,**  but WITHOUT ANY WARRANTY; without even the implied warranty of**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU**  Lesser General Public License for more details.****  You should have received a copy of the GNU Lesser General Public**  License along with this library; if not, write to the Free Software**  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA******************************************************************************/#include <windows.h>#include <string.h>#include <stdio.h>#include <stdlib.h>#include <stdarg.h>#include "g2_win32_P.h"#include "resource.h"int WINAPI About(HWND hDlg,UINT message, WPARAM wParam,LPARAM lParam){	switch (message){	case WM_INITDIALOG:		return TRUE;	case WM_COMMAND:		if (wParam == IDOK)			EndDialog(hDlg,wParam);		break;	}	return FALSE;}LRESULT CALLBACK g2_WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){	PAINTSTRUCT ps;	HDC hDC;	RECT Rect;	struct 	g2_win32_STRUCT *pdp;	pdp = (struct g2_win32_STRUCT *)GetWindowLong(hWnd, GWL_USERDATA);	switch (message) { 		case WM_PAINT:			if (pdp == NULL) break;			if (pdp->hBitmap == NULL) break;//			printf("Received WM_PAINT\n");			hDC = BeginPaint (hWnd, &ps);			GetClientRect(hWnd,&Rect);			BitBlt( hDC, Rect.left, Rect.top, Rect.right - Rect.left, 			Rect.bottom - Rect.top, pdp->hMemDC, 0, 0, SRCCOPY );			EndPaint (hWnd, &ps);			return 0L;		case WM_DESTROY://			printf("Received WM_DESTROY\n");			g2_win32_Cleanup(0,pdp);			ExitThread(0);			return 0L;					case WM_COMMAND:			switch(LOWORD(wParam)){						case ID_FILE_COPY:				if (OpenClipboard(hWnd))                   {                    HBITMAP     hBitmap;                                       EmptyClipboard();                    if (pdp->hBitmap)                        {                        if (hBitmap = CopyImage(pdp->hBitmap,IMAGE_BITMAP,												0,0,LR_COPYRETURNORG));                            SetClipboardData(CF_BITMAP, hBitmap);                        }					CloseClipboard();                    }            return 0L;			case ID_FILE_ABOUT:				if(DialogBox(g2res_DLL,"ABOUTBOX",hWnd,(DLGPROC)About) == -1)					errhandler("Failed to create Dialogbox",NULL);				return 0L;			case ID_FILE_CLOS:				g2_win32_Delete(0,pdp);				return 0L;			default:				return (DefWindowProc(hWnd, message, wParam, lParam));			}		default:			return (DefWindowProc(hWnd, message, wParam, lParam));	}/* we should never get here */return -1;}long WINAPI g2_StartThread(struct g2_win32_STRUCT *pdp){RECT	Rect;HWND hWnd;MSG msg;HDC hDC;HMENU hmenu;DWORD style;RECT frame;hmenu = NULL;if (g2res_DLL != NULL)	{	hmenu = LoadMenu(g2res_DLL,"G2WIN32");	if (hmenu == NULL) errhandler("Load menu failed",NULL);	}style = WS_POPUPWINDOW |WS_OVERLAPPED | WS_CAPTION |  WS_MINIMIZEBOX;frame.left = 0;frame.top = 0;frame.right = pdp->nWidth;frame.bottom = pdp->nHeight - ((hmenu==NULL)?GetSystemMetrics(SM_CYMENU):0);AdjustWindowRect(&frame,style,1);/* Save the instance handle in static variable, which will be used in  *//* many subsequence calls from this application to Windows.            */  /* Create a main window for this application instance.  */pdp->hinst = GetModuleHandle(NULL);hWnd = CreateWindow(	 "g2Window",           // See RegisterClass() call.	 pdp->title,		 // Text for window title bar.	 style,	 pdp->x, pdp->y,	 frame.right - frame.left,   // width	 frame.bottom - frame.top,   // height	 NULL,                  // Overlapped windows have no parent.	 hmenu,                 // Use the window class menu.	 0,                     // This instance owns this window.	 NULL                   // Pointer not needed.  );   // If window could not be created, return "failure"  if (!hWnd)	 {	 errhandler("CreateWindow",NULL);	 return (FALSE);   // return failure :((	 }#define WIDTH(x)	(x.right-x.left+1)	// Macro to get rect width#define HEIGHT(x)	(x.bottom-x.top+1)	// Macro to get rect height// How big is the window?GetClientRect( hWnd, &Rect );// Need a DChDC = GetDC( hWnd );SetBkColor(hDC,RGB(255,255,255));// Create a bitmap big enough to hold the window's imagepdp->hBitmap = CreateCompatibleBitmap( hDC, WIDTH(Rect), HEIGHT(Rect) );// printf("memdc size: %d %d\n",WIDTH(Rect),HEIGHT(Rect));// Create MemDCpdp->hMemDC = CreateCompatibleDC(hDC);SelectObject( pdp->hMemDC, pdp->hBitmap );// clean upReleaseDC( hWnd, hDC );#undef WIDTH#undef HEIGHTSetWindowLong(hWnd, GWL_USERDATA, (long)pdp);   pdp->hwndThreadWindow = hWnd; // Make the window visible; update its client area; and return "success"  ShowWindow(hWnd, SW_SHOWDEFAULT); // Show the window UpdateWindow(hWnd);     // Sends WM_PAINT message //printf("pdp->messageloop ->= 1;\n"); pdp->messageloop = 1; //printf("pdp->messageloop = 1;\n");  while (GetMessage(&msg, NULL, 0, 0)) {        TranslateMessage(&msg);		DispatchMessage(&msg);    }  return (TRUE);        // Returns success  :)}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -