wordのように

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
student
記事: 5
登録日時: 5年前

wordのように

#1

投稿記事 by student » 5年前

wordのように行で区切り、文字列を入力できるプログラムを作りたいです。
また、入力した文字列を自由な行に移動できるようにもしたいです。
dxライブラリの関数一覧を見てみたのですが、どうすればよいか皆目見当もつきません。
他力本願で、ごみのような質問ですが、、もしよろしければ
プログラムのサンプルと解説を添えていただけるとありがたいです。

アバター
あたっしゅ
記事: 663
登録日時: 13年前
住所: 東京23区
連絡を取る:

Re: wordのように

#2

投稿記事 by あたっしゅ » 5年前

>wordのように行で区切り、文字列を入力できるプログラムを作りたいです。
>また、入力した文字列を自由な行に移動できるようにもしたいです。

誰も答えていないので。
「dxライブラリ」は、上記のようなプログラムを作るには、不向きです。
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。

中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。

アバター
あたっしゅ
記事: 663
登録日時: 13年前
住所: 東京23区
連絡を取る:

Re: wordのように

#3

投稿記事 by あたっしゅ » 5年前

Windows でなら、Visual Studio で、C# のプロジェクトを選んで、フォームにテキストボックスを貼り付けるだけで、複数行の文字列を入力でき、入力した文字列を自由な行に移動できるプログラムが出来ます。くわしくは、C# に詳しい方に、お任せします。

C++ にこだわるなら、https://forest.watch.impress.co.jp/docs ... 33620.html
Embarcadero C++Builder のフル機能を無償で(ja)
で、フォームにテキストボックスを貼り付けるだけで、出来ます。といっても、C++Builder 流な C++ ですが。
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。

中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。

student
記事: 5
登録日時: 5年前

Re: wordのように

#4

投稿記事 by student » 5年前

返信遅れてすみません。
丁寧に教えていただきありがとうございます。
自分はc#は全然わからないので今回は諦めますw

Bull
記事: 149
登録日時: 9年前

Re: wordのように

#5

投稿記事 by Bull » 5年前

エディットコントロールを使用するなら、C言語でもできます。
こういうページがあります。
メモ帳を作る

かずま

Re: wordのように

#6

投稿記事 by かずま » 5年前

word のように、というので、文字のサイズやフォンや色を変更できる
ものを作りたいのかと思って、それは難しいからと放置していたのですが、
メモ帳程度でよいのなら、エディットコントロールでできます。

コード:

#undef UNICODE
#define _CRT_SECURE_NO_WARNINGS
#include <windows.h>
#include <stdio.h>   // fopen, fclose, fread, fwrite, fseek, ftell
#include <stdlib.h>  // malloc, free

char *fname, *text;
BOOL modified = FALSE;
HWND hEdit;
HINSTANCE hInst;

void onCreate(HWND hwnd)
{
	hEdit = CreateWindowA("EDIT", NULL,
		WS_CHILD | WS_VISIBLE | WS_BORDER | WS_HSCROLL | WS_VSCROLL
		| ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_LEFT | ES_MULTILINE,
		10, 10, 600, 420, hwnd, (HMENU)1, hInst, NULL);
	SetWindowText(hEdit, text);
}

void onDestroy()
{
	if (modified) {
		FILE *fp = fopen(fname, "wb");
		if (fp) {
			int size = GetWindowTextLength(hEdit);
			char *p = (char *)malloc(size + 1);
			if (p) {
				size = GetWindowText(hEdit, p, size + 1);
				fwrite(p, 1, size, fp);
				fclose(fp);
				free(p);
			}
		}
	}
	free(text);
	PostQuitMessage(0);
}

LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
{
	switch (msg) {
	case WM_CREATE:  onCreate(hwnd); break;
	case WM_DESTROY: onDestroy();  break;
	case WM_COMMAND:
		if (LOWORD(wp) == 1 && HIWORD(wp) == EN_UPDATE) modified = TRUE;
		break;
	default: return DefWindowProc(hwnd, msg, wp, lp);
	}
	return 0;
}

int WINAPI WinMain(HINSTANCE h, HINSTANCE prev, LPSTR cl, int cs)
{
	if (*cl) {
		fname = cl;
		FILE *fp = fopen(fname, "rb");
		if (!fp) {
			MessageBox(NULL, "ファイルがオープンできない", "", 0);
			return 0;
		}
		fseek(fp, 0, SEEK_END);
		int size = ftell(fp);
		rewind(fp);
		text = (char *)malloc(size + 1);
		if (!text) return 0;
		size = fread(text, 1, size, fp);
		text[size] = '\0';
		fclose(fp);
	}
	else fname = (char *)"無題.txt";

	hInst = h;
	WNDCLASS wcl = { 0, WindowProc, 0, 0, h, NULL,
		LoadCursor(NULL, IDC_ARROW), (HBRUSH)(COLOR_WINDOW + 1), NULL, "wc" };
	if (!RegisterClass(&wcl)) return FALSE;
	if (!CreateWindowEx(WS_EX_COMPOSITED, "wc", fname,
		WS_OVERLAPPEDWINDOW | WS_VISIBLE,
		80, 60, 640, 480, NULL, NULL, h, NULL)) return 0;

	MSG msg;
	while (GetMessage(&msg, NULL, 0, 0)) {
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return msg.wParam;
}
コマンドラインの第1引数をファイル名とします。

Visual Studio で実行する場合は、
プロジェクトのプロパティの構成プロパティのデバッグの
コマンド引数に、ファイル名を書いてから実行してください。

エクスプローラで、ファイルを実行ファイルのアイコンに
ドラッグ&ドロップしても動きます。

終了するとき、テキストが修正されてればファイルを更新します。

student
記事: 5
登録日時: 5年前

Re: wordのように

#7

投稿記事 by student » 5年前

丁寧に教えていただきありがとうございます。
ただ自分はstdioとdxlibの初歩的な部分しかわからないので、皆様のアドバイスを参考にすこしずつググって勉強します。
自分の能力に見合わない質問でしたすいませんでした。

YuO
記事: 947
登録日時: 13年前
住所: 東京都世田谷区

Re: wordのように

#8

投稿記事 by YuO » 5年前

いまさらですが,一応Rich Editというコントロールがあったりします。
Editコントロールはメモ帳に相当しますが,Rich Editコントロールはワードパッドに相当します。

LoadLibrary等が必要なので,Editコントロールよりは使い方が面倒ではありますが……。

返信

“C言語何でも質問掲示板” へ戻る