質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

0回答

740閲覧

C# WPF  ペイントツールをバックグラウンドでも線を描きたい

wasd

総合スコア12

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

1クリップ

投稿2019/06/06 06:56

編集2019/06/06 07:00

##実現したいこと
以下の機能を加えたペイントツールを作成したい
####実現済み(最適かは不明)
・背景を透明にする
(現在は色を付けている)
・マウスのボタンが離された時に描かれた線を消す

####未実装
#####・バックグラウンドでペイントをし続ける※最重要
・マウスの入力されているボタンにより色を変える
(できている気はするが微妙)
・マウスボタンを押さなくても線が描ける
・描画開始位置を中心で固定する
・マウスボタンの入出力があるたびに中心に戻る
(現在線を消せているので初期位置の設定ができればなんとかなりそう??)

現在のコードは以下の通りです。

C#

1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Text; 5using System.Text.RegularExpressions; 6using System.Threading.Tasks; 7using System.Windows; 8using System.Windows.Controls; 9using System.Windows.Data; 10using System.Windows.Documents; 11using System.Windows.Ink; 12using System.Windows.Input; 13using System.Windows.Media; 14using System.Windows.Media.Imaging; 15using System.Windows.Navigation; 16using System.Windows.Shapes; 17 18namespace test 19{ 20 /// <summary> 21 /// MainWindow.xaml の相互作用ロジック 22 /// </summary> 23 public partial class MainWindow : Window 24 { 25 public bool Capture { get; private set; } 26 27 public MainWindow() 28 { 29 InitializeComponent(); 30 31 WindowStartupLocation = WindowStartupLocation.CenterScreen; 32 canvas.MouseMove += move; 33 canvas.MouseLeftButtonDown += down; 34 canvas.MouseLeftButtonUp += up; 35 } 36 private DrawingAttributes ink = new DrawingAttributes(); 37 38 private void load(object sender, RoutedEventArgs e) 39 { 40 ink.Width = 10; 41 ink.Height = 10; 42 Color myColor = (Color)ColorConverter.ConvertFromString("#aaFFFFFF"); 43 44 ink.Color = myColor; 45 46 canvas.DefaultDrawingAttributes = ink; 47 _ = Mouse.Capture(this); 48 } 49 50 private void up(object sender, MouseButtonEventArgs e) 51 { 52 canvas.Strokes.Clear(); 53 } 54 55 private void down(object sender, MouseButtonEventArgs e) 56 { 57 changeColor(e); 58 } 59 60 private void move(object sender, MouseEventArgs e) 61 { 62 changeColor(e); 63 } 64 private void changeColor( MouseEventArgs e) 65 { 66 if(e.LeftButton == MouseButtonState.Pressed) 67 { 68 Color myColor = new Color(); 69 myColor = (Color)ColorConverter.ConvertFromString("#aaFF0000"); 70 ink.Color = myColor; 71 72 canvas.DefaultDrawingAttributes = ink; 73 } 74 else 75 { 76 Color myColor = new Color(); 77 myColor = (Color)ColorConverter.ConvertFromString("#aaFFFFFF"); 78 ink.Color = myColor; 79 80 canvas.DefaultDrawingAttributes = ink; 81 } 82 } 83 84 private void right_down(object sender, MouseButtonEventArgs e) 85 { 86 } 87 } 88} 89

xaml

1<Window x:Class="test.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 6 xmlns:local="clr-namespace:test" 7 mc:Ignorable="d" 8 Title="MainWindow" Height="600" Width="800" Background="Transparent" AllowsTransparency="True" WindowStyle="None" Loaded="load" > 9 <Grid> 10 <InkCanvas Name="canvas" Height="600" Width="800" Background="#0F00FF00" MouseLeftButtonUp="up" PreviewMouseLeftButtonDown="down" MouseMove="move" MouseRightButtonDown="right_down"/> 11 </Grid> 12</Window> 13

以上です。

ご回答お待ちしてます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takabosoft

2019/06/06 07:20

「バックグラウンドでペイントをし続ける」ってどういう意味でしょう?全く理解ができないのですが・・・
wasd

2019/06/06 07:39

takabosoft さん 説明がへたで申し訳ございません。 アプリケーションが起動している間は別のアプリケーション(ゲームやブラウザ)を操作中もウィンドウにマウスの動きに応じた線を描き続けるようにしたいです。
takabosoft

2019/06/06 08:48

なるほど理解しました。課題は小さく区切って最小限の内容で質問してもらった方が回答が付きやすいと思います。「別のアプリケーションを操作中もマウスの位置やクリックを検出したい」など。過去の記事も検索してくださいね。
wasd

2019/06/06 10:25

アドバイスありがとうございます。 このサイトを使うのが初めてなのでわからないのですが、別で質問する場合今あるこの質問は削除や解決済みにした方が良いのでしょうか?
takabosoft

2019/06/07 00:43

たぶん削除申請で良いと思います。たまに申請通らないことがありますが。
wasd

2019/06/07 02:39

クリップされている方がいますので削除はせず別で質問を投稿させて頂きました。 複数質問を同時投稿することに問題があるようでしたら教えてください。。 すぐさま削除依頼を申請致します。 また、回答はもちろん受付ていますので、わかる方がいましたら回答していただければと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問