當前位置:首頁 » 編程語言 » c語言控制台如何畫
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言控制台如何畫

發布時間: 2022-10-31 14:32:33

㈠ 如何在C++ CONSOLE中畫圖

CONSOLE似乎不能直接繪圖,提供幾種解決方案
1、通過調用支持繪圖的DLL中的函數實現繪圖。在DLL中產生窗體並繪圖。
2、直接使用matlab引擎介面,把繪圖工作交給matlab
3、VC++2003以上,使用帶MFC支持的控制台程序可以建立CImage類型的對象,先Create(),再GetDC(),初始化一個HDC,使用標準的GDI函數繪圖。畫完了Save()到磁碟。最後別忘了用ReleaseDC釋放內存。

㈡ 怎麼用c語言畫點和直線

  1. 這個不管怎麼說不是最開始的控制台的程序,這個新建工程的時候需要選擇的是Win32的程序

  2. 畫線的函數使用windows提供的API,MoveTo:移動到起點,LineToEx:移動到終點的這兩個函數,是在OnPaint,或是響應WM_PAINT的消息的時候處理這兩個函數;畫點的畫,使用SetPixel這個函數,同樣也是在WM_PAINT的消息中去處理與畫圖有關的操作的

㈢ 請問 c語言控制台 只使用graphics.h 怎麼畫出兩個顏色不同的實心矩形

rectangle(),然後填充裡面。
或者bar3d(),depth為0

㈣ 如何用c語言在控制台彈出一個輸入對話框

#include <tchar.h>
#include <windows.h>

HINSTANCE _HInstance; // 應用程序句柄
TCHAR _Title[] = _T("簡單文本框"); // 定義窗口的標題

TCHAR _WindowClass[] = _T("MySimpleTextBoxApp");// 主窗口類名
ATOM _RegisterClass(); // 注冊主窗口類
HWND _CreateWindow(int nCmdShow); // 創建主窗口
LRESULT CALLBACK _WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); // 主窗口消息處理函數

TCHAR _TextBoxClass[] = _T("MySimpleTextBox"); // 文本框的類名
ATOM _RegisterTextBoxClass(); // 注冊文本框的類
HWND _CreateTextBoxWindow(HWND hParentWnd); // 創建文本框
LRESULT CALLBACK _TextBoxWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); // 文本框窗口消息處理函數
void _DrawText(HDC hDC); // 繪制文本
void _SetCaretPos(HWND hWnd); // 設置游標位置
void _UpdateWindow(HWND hWnd); // 更新窗口

// 一些常量定義
#define MAINWINDOW_WIDTH 400 // 主窗口寬度
#define MAINWINDOW_HEIGHT 200 // 主窗口高度
#define TEXTBOX_WIDTH 300 // 文本框寬度
#define TEXTBOX_HEIGHT 20 // 文本框高度
#define TEXTBOX_MAXLENGTH 1024 // 文本框中文本的最大長度

TCHAR _String[TEXTBOX_MAXLENGTH + 1] = _T(""); // 文本
int _StringPosition = ::_tcslen(_String); // 游標插入點所在的位置

int APIENTRY _tWinMain(HINSTANCE hInstance, // 當前的應用程序句柄
HINSTANCE hPrevInstance, // 前一個應用程序實例的句柄(在Win32上,始終為NULL)
LPTSTR lpCmdLine, // 命令行參數
int nCmdShow // 窗口的顯示樣式
)
{
_HInstance = hInstance;

_RegisterClass(); // 注冊窗口類
if(_CreateWindow(nCmdShow) == NULL) // 創建窗口
return FALSE;

MSG msg;
while (::GetMessage(&msg, NULL, 0, 0)) // 從消息隊列中獲取消息
{
::TranslateMessage(&msg); // 轉譯一些特殊的消息
::DispatchMessage(&msg); // 執行消息處理
}

return (int)msg.wParam;
}

// 注冊應用程序窗口類
ATOM _RegisterClass()
{
WNDCLASSEX wc;
::ZeroMemory(&wc, sizeof(wc)); // 作為一步清空,是為了讓未賦值的欄位的默認值為(或NULL)

wc.cbSize = sizeof(wc);
wc.style = CS_HREDRAW | CS_VREDRAW; // 指定當窗口橫向和縱向的尺寸發生變化時都會重繪窗口
wc.hInstance = _HInstance;
wc.hbrBackground = (HBRUSH)( COLOR_APPWORKSPACE + 1); // 指定主窗口背景為「工作區域」系統顏色
wc.lpszClassName = _WindowClass; // 此為要注冊的類名,創建窗口時要以此類名為標識符
wc.lpfnWndProc = _WndProc; // 此為處理窗口消息的函數

return ::RegisterClassEx(&wc); // 調用API函數注冊窗口類
}

// 創建窗口
HWND _CreateWindow(int nCmdShow)
{
HWND hWnd = ::CreateWindow(_WindowClass, _Title, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, MAINWINDOW_WIDTH, MAINWINDOW_HEIGHT, NULL, NULL, _HInstance, NULL);

if(hWnd == NULL)
return NULL;

::ShowWindow(hWnd, nCmdShow);
::UpdateWindow(hWnd);

return hWnd;
}

// 窗口處理過程
LRESULT CALLBACK _WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static HWND hTextBoxWnd;

switch (message)
{
case WM_CREATE: {
_RegisterTextBoxClass(); // 注冊文本框的類
hTextBoxWnd = _CreateTextBoxWindow(hWnd); // 創建文本框
} break;

case WM_ACTIVATE: // 當窗口被激活時,將焦點設置在文本框上
::SetFocus(hTextBoxWnd);
break;

case WM_SETCURSOR: { // 設置游標形狀
static HCURSOR hCursor = ::LoadCursor(NULL, IDC_ARROW);
::SetCursor(hCursor);
} break;

case WM_DESTROY: // 應用程序被關閉
::PostQuitMessage(0);
break;

default:
return ::DefWindowProc(hWnd, message, wParam, lParam);
}

return (LRESULT)0;
}

// 注冊文本框的類
ATOM _RegisterTextBoxClass()
{
WNDCLASSEX wc;
::ZeroMemory(&wc, sizeof(wc));

wc.cbSize = sizeof(wc);
wc.style = CS_VREDRAW | CS_HREDRAW | CS_DBLCLKS; // 指定當窗口尺寸發生變化時重繪窗口,並且響應滑鼠雙擊事件
wc.hInstance = _HInstance;
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); // 指定窗口背景顏色為系統顏色「窗口背景」
wc.lpszClassName = _TextBoxClass; // 指定要注冊的窗口類名,創建窗口時要以此類名為標識符
wc.lpfnWndProc = _TextBoxWndProc; // 處理窗口消息的函數

return ::RegisterClassEx(&wc); // 調用API函數注冊文本框窗口
}

// 創建文本框
HWND _CreateTextBoxWindow(HWND hParentWnd)
{
// 之下代碼是為了讓文本框顯示在父窗口中央,而計算位置
RECT parentWndRect;
::GetClientRect(hParentWnd, &parentWndRect); // 獲取父窗口客戶區的位置
int left = (parentWndRect.right - TEXTBOX_WIDTH) / 2, top = (parentWndRect.bottom - TEXTBOX_HEIGHT) / 2;

// 創建文本框
HWND hWnd = ::CreateWindow(_TextBoxClass, NULL, WS_CHILDWINDOW | WS_VISIBLE,
left, top, TEXTBOX_WIDTH, TEXTBOX_HEIGHT,
hParentWnd, NULL, _HInstance, NULL);

return hWnd;
}

// 文本框消息的處理過程
LRESULT CALLBACK _TextBoxWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_PAINT: { // 繪制這里之所以加一對大括弧,是為了讓之下定義的變數局部化

static PAINTSTRUCT ps;
static RECT rect;
HDC hDC = ::BeginPaint(hWnd, &ps); // 開始繪制操作

::GetClientRect(hWnd, &rect); // 獲取客戶區的尺寸
::DrawEdge(hDC, &rect, EDGE_SUNKEN, BF_RECT); // 繪制邊框,EDGE_SUNKEN表示繪制樣式為內嵌樣式,BF_RECT表示繪制矩形邊框
_DrawText(hDC); // 繪制文本
::EndPaint(hWnd, &ps); // 結束繪制操作

} break;

case WM_SETFOCUS: { // 獲得焦點
::CreateCaret(hWnd, (HBITMAP)NULL, 1, TEXTBOX_HEIGHT-5); // 創建游標
_SetCaretPos(hWnd); // 設置游標位置
::ShowCaret(hWnd); // 顯示游標
} break;

case WM_KILLFOCUS: // 失去焦點
::HideCaret(hWnd); // 隱藏游標
::DestroyCaret(); // 銷毀游標
break;

case WM_SETCURSOR: { // 設置游標形狀
static HCURSOR hCursor = ::LoadCursor(NULL, IDC_IBEAM);
::SetCursor(hCursor);
} break;

case WM_CHAR: { // 字元消息
TCHAR code = (TCHAR)wParam;
int len = ::_tcslen(_String);
if(code < (TCHAR)' ' || len >= TEXTBOX_MAXLENGTH)
return 0;

::MoveMemory(_String + _StringPosition + 1, _String + _StringPosition, (len - _StringPosition + 1) * sizeof(TCHAR));
_String[_StringPosition ++] = code;

_UpdateWindow(hWnd);
_SetCaretPos(hWnd);

} break;

case WM_KEYDOWN: { // 鍵按下消息
TCHAR code = (TCHAR)wParam;

switch (code)
{
case VK_LEFT: // 左游標鍵
if(_StringPosition > 0)
_StringPosition --;
break;

case VK_RIGHT: // 右游標鍵
if(_StringPosition < (int)::_tcslen(_String))
_StringPosition ++;
break;

case VK_HOME: // HOME 鍵
_StringPosition = 0;
break;

case VK_END: // END 鍵
_StringPosition = ::_tcslen(_String);
break;

case VK_BACK: // 退格鍵
if(_StringPosition > 0)
{
::MoveMemory(_String + _StringPosition - 1, _String + _StringPosition, (::_tcslen(_String)-_StringPosition + 1) * sizeof(TCHAR));
_StringPosition --;
_UpdateWindow(hWnd);
}
break;

case VK_DELETE: { // 刪除鍵
int len = ::_tcslen(_String);
if(_StringPosition < len)
{
::MoveMemory(_String + _StringPosition, _String + _StringPosition + 1, (::_tcslen(_String) - _StringPosition + 1) * sizeof(TCHAR));
_UpdateWindow(hWnd);
}

} break;

}

_SetCaretPos(hWnd);

} break;

case WM_LBUTTONDOWN: { // 滑鼠單擊,設置游標位置
int x = LOWORD(lParam);
HDC hDc = ::GetDC(hWnd);

int strLen = ::_tcslen(_String), strPos = 0;
SIZE size;

for (strPos=0; strPos<strLen; strPos++)
{
::GetTextExtentPoint(hDc, _String, strPos, &size);

if(size.cx + 4 >= x)
break;
}

_StringPosition = strPos;
::GetTextExtentPoint(hDc, _String, strPos, &size);
::SetCaretPos(size.cx + 4, 3);

::ReleaseDC(hWnd, hDc);

} break;

default:
return ::DefWindowProc(hWnd, message, wParam, lParam);
}

return (LRESULT)0;
}

// 更新窗口
void _UpdateWindow(HWND hWnd)
{
RECT rect;
::GetClientRect(hWnd, &rect);
::InvalidateRect(hWnd, &rect, TRUE);
::UpdateWindow(hWnd);
}

// 繪制文本
void _DrawText(HDC hDC)
{
int len = ::_tcslen(_String);
::TextOut(hDC, 4, 2, _String, len);
}

// 設置游標位置
void _SetCaretPos(HWND hWnd)
{
HDC hDC = ::GetDC(hWnd);

SIZE size;
::GetTextExtentPoint(hDC, _String, _StringPosition, &size);
::SetCaretPos(4 + size.cx, 3);

::ReleaseDC(hWnd, hDC);

}

㈤ 用C語言編寫控制台程序,如何實現在需要時隱藏和顯示控制台

#include<stdio.h>
#include<stdlib.h>
main()
{
intyear;
scanf("%d",&year);
while(year!=0)
{
if(year%4==0&&year%100!=0||year%400==0)
printf("%d是閏年",year);
elseprintf("%d不是閏年",year);
system("pause");
scanf("%d",&year);
}
}
加一個while循環即可,當輸入年份不為0時,可繼續輸入,輸入0則結束
如果你想一直運行的話,加一個while(0)即可。

㈥ C語言控制台程序(dos界面)如何實現改變運行時窗口出現的位置,在窗口裡繪圖。導入圖片等。

真的很想認真在windows平台上寫程序,了解windows窗口與消息機制是必須的
win32 sdk編程去看看吧
easyx使用了win32 sdk編程,方便各位的使用

㈦ C語言如何在控制台程序中畫線

控制台可以繪圖,甚至可以顯示圖片。方法大致是這樣的,先用API獲取控制台窗口句柄,在利用此句柄獲取HDC,然後使用繪圖api繪圖。網上有一篇文章是關於控制台顯示圖片的,你自己去找找吧。。。。。。樓上的回答太。。。。。。。學過WINDOWS圖形界面編程的話,這些都更容易的。。。。。。。

㈧ 製作一個C語言」hello Word「控制台程序。

簡介
這是一個最簡單的C語言控制台程序。
材料/工具
Visual
studio(或能編程C語言的軟體)
方法
1
打開Visual
studio。
2
新建一個項目。
3
輸入代碼:#include
"stdafx.h"
int
main()
{
printf("hello
word");
return
0;
}
4
運行後就是這樣了。

㈨ vs2017C語言圖形編程,我想寫一個貪吃蛇在控制台畫一個方塊,用什麼方法

控制台下要加第三方圖形庫

㈩ 用C語言 在控制台下畫圓或者橢圓

①需要調用控制台的坐標設置函數 ②利用圓/橢圓/...的參數方程並將值代入即可

記得採納啊